来自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)
{
}
});
答案
我认为这是因为在创建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上的主要内容,如果未能解决你的问题,请参考以下文章