Я пытаюсь получить данные (имя преподавателя) из базы данных. Полученные данные не отображаются в диалоговом окне, но отображаются в тосте.
Вот код:
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)
{
}
});
Я думаю, это из-за того, что reference.addValueEventListener
запускается после создания alertDialog. потому что addValueEventListener
запускается только после того, как произошел addValueEvent
, поэтому в вашем коде пустой список был передан в ваш alertDialog, а затем отображается, после этого данные были извлечены и reference.addValueEventListener
был запущен. вы должны создать alertDialog после получения всех ваших данных, а не раньше.
например, вы должны знать количество ваших результатов и подсчитывать полученные данные в методе onDataChange
, и просто показывать alertDialog, когда количество fetchData достигает исключенного количества.
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())