android - Firebase 实时数据库读取所有现有数据

标签 android firebase firebase-realtime-database

似乎 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/

相关文章:

java - 如何在另一个 child Firebase 中按 child 顺序

android - 在 Google Play 中将用户从开放测试转移到生产的过程是怎样的?

android - 不同 Activity 中的相同抽屉导航

android - 如何从android中的xml文件中的链接保存数据?

Firebase如何知道特定客户端离线?

javascript - 使用 jQuery/JavaScript 在 Firebase 中嵌套数组

firebase - Firebase 控制台中的“无法加载您的数据库”错误

Android broadcastreceiver 创建新实例

ios - firebase ios snapshot.childrenCount 返回默认值 0 而不是数据库值

Firebase 查询收集和合并子集合数据