【问题标题】:How to Get Count of Nested Nodes of a Parent Node in Firebase如何在 Firebase 中获取父节点的嵌套节点数
【发布时间】:2018-02-06 14:20:39
【问题描述】:

我有一个应用程序,每次用户 SignUp 使用 Google Email Provider 并且用户被推送时,它都会在数据库中存储 user.getEmail到其生成的唯一 Firebase 随机 ID 下的 firebase 数据库。 如何计算节点 Authenticated-Users 下所有这些基本上 Random IDs 的数量?

如图所示,我有 2 个基本用户,我想计算这些生成的 ID,例如 2

UPDATED如果这是不可能的,那么如何知道所有数据何时完全加载 ???

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference yourRef = rootRef.child("Authenticated-Users");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            long count = dataSnapshot.getChildrenCount();
            Log.d("TAG", count + "");
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    yourRef.addListenerForSingleValueEvent(eventListener);
    

    或者像这样遍历孩子:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference yourRef = rootRef.child("Authenticated-Users");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int count = 0;
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                count = count + 1;
            }
            Log.d("TAG", count + "");
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    yourRef.addListenerForSingleValueEvent(eventListener);
    

    【讨论】:

    • 根据问题的第一部分,这可以正常工作,问题的 已更新部分仍然存在?
    • 你能告诉我如何知道所有数据何时完全加载
    • 无法知道数据何时完全加载。 Firebase 是一个实时数据库,因此可以随时进行更改。所以数据可能永远不会完整。
    • 谢谢您,先生,我想再问您一个问题:如何确保 Authenticated-Users 节点下的 emailIds 是唯一的?
    • 不客气!如果你想要,改变你的数据库结构,而不是使用那些 pusehed id,使用电子邮件地址。然后,在Authenticated-Users 节点上附加一个侦听器,并在DatabaseReference 对象上使用exists() 方法。而已。干杯!
    【解决方案2】:

    您可以为给定的路径|位置获取孩子,如下所示:

    dBPathRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.i(dataSnapshot.getChildrenCount()+"Count");
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 2019-09-18
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      相关资源
      最近更新 更多