来自firebase的提取数据未显示在alertDialog上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自firebase的提取数据未显示在alertDialog上相关的知识,希望对你有一定的参考价值。

我试图从firebase获取数据(教员名称)。获取的数据未显示在对话框中,但显示在吐司上。

这是代码:

list = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("FacultyMember");
reference.addValueEventListener(new ValueEventListener()
{
    @Override
    public void onDataChange(DataSnapshot dataSnapshot)
    {
        for (DataSnapshot ds : dataSnapshot.getChildren())
        {
            String Name = ds.child("Name").getValue().toString();
            list.add(Name);
            Toast.makeText(getApplicationContext(),Name,Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
AlertDialog.Builder builder =new AlertDialog.Builder(AdminHome.this);
builder.setTitle("Member List");
builder.setIcon(R.drawable.ic_format_list_bulleted_black_24dp);
builder.setItems(list.toArray(new String[0]), new DialogInterface.OnClickListener()
{
    @Override
    public void onClick(DialogInterface dialogInterface, int i)
    {

    }
});

Screenshot of the output

答案

我认为这是因为在创建alertDialog之后触发了reference.addValueEventListener。因为addValueEventListener仅在addValueEvent发生后被触发,所以在你的代码中,空列表已经传递给你的alertDialog,然后显示,之后数据被提取并且reference.addValueEventListener被触发。在获取所有数据后,您必须创建alertDialog,而不是更快。

例如,您必须知道结果的数量并在onDataChange方法中计算获取的数据,并在fetchData的数量达到例外计数时显示alertDialog。

list = new ArrayList<>();
int execptedResult = NUMBER_OF_RESULT; // <--- you must fetch data from firebase in some way, it depends on your implementation 
int fetchCount = 0;
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("FacultyMember");
reference.addValueEventListener(new ValueEventListener()
{
    @Override
    public void onDataChange(DataSnapshot dataSnapshot)
    {
        for (DataSnapshot ds : dataSnapshot.getChildren())
        {
            fetchCount++;
            String Name = ds.child("Name").getValue().toString();
            list.add(Name);
            Toast.makeText(getApplicationContext(),Name,Toast.LENGTH_LONG).show();
            if(fetchCount == execptedResult){
                AlertDialog.Builder builder =new AlertDialog.Builder(AdminHome.this);
                builder.setTitle("Member List");
                builder.setIcon(R.drawable.ic_format_list_bulleted_black_24dp);
                builder.setItems(list.toArray(new String[0]), new 
                    DialogInterface.OnClickListener()
                    {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i)
                        {

                        }
                    });
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
另一答案

尝试替换它

builder.setItems(list.toArray(new String[0]), new DialogInterface.OnClickListener()

运用

builder.setItems(list.toArray(new String[list.size()]), new DialogInterface.OnClickListener())

以上是关于来自firebase的提取数据未显示在alertDialog上的主要内容,如果未能解决你的问题,请参考以下文章

Recyclerview 未显示来自 Firebase Kotlin 的数据

离子 |未显示来自 Firebase 的结果

Firebase Android ListView 未显示

Firebase Android ListView 未显示

swift:来自firebase的照片未显示在表格视图中

列表视图未显示我来自 FIREBASE 的项目