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模拟器上只有黑屏。 任何人都可以就如何完成这项任务提出任何建议吗?
答案 0 :(得分:4)
这是因为 ,
"onlineCourses": [
{
"title": "Javascript Syntax",
"school": "Udacity",
"dates": "May 2016"
}]
}
阻止了UI线程。你永远不应该这样做。相反,您应该创建适配器并将其添加到Thread.sleep(1000);
回调内的列表中。像这样:
onDataChange
答案 1 :(得分:1)
firebase响应的Bcoz需要一些时间,因此其他代码会在您获取数据之前运行,然后您会获得 firebase响应。这是个好主意将你的代码放在listner中需要一些时间......
在onDataChange()
................
for loop
在条件下移除.......................
享受编码.......................