首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Firebase中获取所有可用孩子的孩子总数?

如何在Firebase中获取所有可用孩子的孩子总数?
EN

Stack Overflow用户
提问于 2021-05-20 17:28:58
回答 1查看 28关注 0票数 0

我的Firebase实时数据库结构是:

代码语言:javascript
复制
{
"Declare":{
  "GokulAsGokul1":{
     "10-2020":{"Month":"10-2020"},
     "5-2021":{"Month":"5-2021"},
     "5-2023":{"Month":"5-2023"},
     "5-2026":{"Month":"5-2026"},
     "5-2027":{"Month":"5-2027"}
  },
  "GokulAsGokul2":{
     "10-2025":{"Month":"10-2025"},
     "5-2021":{"Month":"5-2021"}
  },
  "GokulAsGokul3":{
     "6-2021":{"Month":"6-2021"}
  },
  "GokulAsGokul4":{
     "4-2021":{ "Month":"4-2021"}
  }
 }
}

每个用户都有一些数据集合,比如GokulAsGokul1有5个集合,GokulAsGokul2有2个集合。我想要所有用户的数据集的数量。应该是5+2+1+1=9,但我得到的结果只有4。

我的代码是:

代码语言:javascript
复制
reference = FirebaseDatabase.getInstance().getReference("Declare");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String name = Long.toString(snapshot.getChildrenCount());
            Toast.makeText(DashboardActivity.this, name, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
            Toast.makeText(DashboardActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 15:00:33

为了解决这个问题,你应该通过在"DataSnapshot“对象上循环两次,在数据库中深入一层。因此,下面几行代码就可以做到这一点:

代码语言:javascript
复制
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference declareRef = rootRef.child("Declare");
declareRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            int count = 0;
            for (DataSnapshot nameSnapshot : task.getResult().getChildren()) {
                for (DataSnapshot dateSnapshot : nameSnapshot.getChildren()) {
                    count++;
                }
            }
            Log.d(TAG, "count: " + count);
        } else {
            Log.d(TAG, task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

logcat中的结果将是:

代码语言:javascript
复制
count: 9

使用您的代码,您只会得到4,因为您在"Declare“节点的子节点上进行了在线循环,它们是4. GokulAsGokul1、GokulAsGokul2、GokulAsGokul3和GokulAsGokul4。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67617665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档