【发布时间】:2017-04-06 23:49:20
【问题描述】:
我在 Android 应用程序中使用 Firebase ValueEventlistener 从数据库中检索一些数据来初始化我的 UI,但我的问题是我永远不知道何时完成数据提取,这取决于用户互联网连接的速度,我为侦听器完成获取数据设置了 5 秒的延迟,但有时这还不够,并且数据仍然为空,从而给出空指针异常。我想知道 Firebase 侦听器何时完成获取数据以便能够更新我的 UI。
这是我获取数据的一种方法:
public void GetRequests(){
Retrieve.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> Games = dataSnapshot.getChildren();
for(com.google.firebase.database.DataSnapshot game : Games ){
String Game_Key = game.child("GameKey").getValue(String.class);
String Game_Location = game.child("Location").getValue(String.class);
String UserID_Sender = game.child("UserID").getValue(String.class);
Adapter_Game_Key.add(Game_Key);
Adapter_UserID_Sender.add(UserID_Sender);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
在这里,我尝试从 ArrayList 中的 Firebase 侦听器获取数据,以便能够通过将 ArrayLists 传递给 ListView 的适配器来初始化 UI。
请问有人有解决办法吗?
【问题讨论】:
-
Firebase 监听器会同步数据,所以严格来说,它们从未完成。另一方面:每次
onDataChange触发时,您都会从数据库中获得一组完整的数据——因此您可以考虑每个“已完成”的数据。如果您分享minimum code that reproduces where you're stuck,可能更容易为您提供帮助。 -
@FrankvanPuffelen 我编辑了代码并添加了代码sn-p,请看一下
标签: android firebase firebase-realtime-database