似乎 Firebase 实时数据库会在添加或删除新项目等时通知我。这很好,但是如何获取我之前收到通知的所有现有项目?
例如,假设我的应用正在列出数据库中的项目。我第一次启动我的应用程序。然后创建了“项目 1”和“项目 2”。 Firebase 通知我“项目 1”和“项目 2”,因此我将它们添加到我的应用列表中。
现在,我的应用程序已关闭并重新启动。如果创建了新项目“项目 3”,我会收到通知,但我如何才能再次检索“项目 1”和“项目 2”?简而言之,我想再次显示所有项目。
我已经搜索过示例,但我能找到的所有示例都是获取事件,而不是“全部读取”。
PS:我认为你们两个花时间来解释。我误解了 Firebase 实时数据库的工作原理;我以为我只会在整个 session 中收到一次新项目通知。似乎 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
因此使用此代码,您可以获得所有用户,即使他们是在您重新启动之后的应用程序之前添加的。您可以实时获取数据。
关于android - Firebase 实时数据库读取所有现有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47353927/