[英]How do I populate a ListView with data from Firebase?
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的线程获取所有数据并将其存储到好友数组列表中,但是我在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) {
}
});
Firebase 响应的 Bcoz需要一些时间,因此在获取数据之前 ,其他代码将运行 ,然后您才获得Firebase响应 。因此,最好将代码放入列表器中,这需要一些时间.....
将这些行添加到您的onDataChange()
方法中,并在结束for loop
。
ArrayAdapter arrayAdapter = new ArrayAdapter(YourClassName.this,android.R.layout.simple_list_item_1,friends);
listView.setAdapter(arrayAdapter);
暂时移除条件.......................
享受编码.......................
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.