Firebase 实时数据库似乎会在添加或删除新项目等情况下通知我。这很好,但如何获取我之前收到通知的所有现有项目?
例如,假设我的应用列出了数据库中的项目。我第一次启动我的应用程序。然后创建了“项目 1”和“项目 2”。Firebase 通知我“项目 1”和“项目 2”,所以我将它们添加到我的应用列表中。
现在,我的应用程序已关闭并重新启动。如果创建了一个新项目“项目 3”,我会收到通知,但如何再次检索“项目 1”和“项目 2”?简而言之,我想再次显示所有项目。
我已经搜索了示例,但我能找到的所有示例都是获取事件,而不是“阅读全部”。
PS:我认为你们两个花时间解释。我误解了 Firebase 实时数据库的工作原理;我以为我只会在会话中收到一次新项目的通知。似乎只能通过 通知我新项目addChildEventListener
,并且我可以使用addValueEventListener
它的 dataSnapshot访问整个项目。
要立即获取节点中存在的所有项目,即使是在您重新启动应用程序之前或之后添加的,您也需要to attach a listener on that node
. Firebase 中的一切都与侦听器有关。这意味着您正在监听在特定位置的数据库中所做的每一个更改。所以在每一刻你都可以dataSnapshot
从你的数据库中获得一个特定的节点。因此,假设我们有一个如下所示的数据库:
Firebase-root
|
--- users
|
--- userId1
| |
| --- //details
|
--- userId2
|
--- //details
如果我们在users
节点上附加一个侦听器,我们可以创建一个List
包含所有用户的对象,如下所示:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userId = ds.getKey();
list.add(userId);
Log.d("TAG", userId);
}
Log.d("TAG", list);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);
您的输出将是:
userId1
userId2
因此,使用此代码,您可以获得所有用户,即使在您重新启动之后的应用程序之前添加了这些用户。您可以实时获取数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句