ListView listView = (ListView) findViewById(R.id.listView);
final ArrayList<String> friends = new ArrayList<String>();
players.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot player : dataSnapshot.getChildren()) {
Log.i("player", player.getKey());
friends.add(player.getKey());
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
while (friends.isEmpty()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// link between a set of data and the AdapterView that displays the data
ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,
friends);
listView.setAdapter(arrayAdapter);
我预计它会让当前线程等待,直到 Firebase 的线程获取所有数据并将其存储到 friends 数组列表中,但我只在我的 Android 模拟器上黑屏。 任何人都可以就如何完成这项任务提出任何建议吗?
最佳答案
那是因为 Thread.sleep(1000);
阻塞了 UI 线程。你永远不应该那样做。相反,您应该创建适配器并将其添加到 onDataChange
回调中的列表。像这样:
final ListView listView = (ListView) findViewById(R.id.listView);
final ArrayList<String> friends = new ArrayList<String>();
players.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot player : dataSnapshot.getChildren()) {
Log.i("player", player.getKey());
friends.add(player.getKey());
}
ArrayAdapter arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1,
friends);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
关于java - 如何使用来自 Firebase 的数据填充 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291606/