Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取Firebase中所有可用子项的总子项数?_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何获取Firebase中所有可用子项的总子项数?

Java 如何获取Firebase中所有可用子项的总子项数?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我的Firebase实时数据库结构是: { "Declare":{ "GokulAsGokul1":{ "10-2020":{"Month":"10-2020"}, "5-2021":{"Month":"5-2021"}, "5-2023":{"Month":&qu

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

{
"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分

我的代码是:

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();
        }
    });

要解决这个问题,您应该通过在“DataSnapshot”对象上循环两次,使数据库更深一层。因此,下面几行代码就可以做到这一点:

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!
        }
    }
});

使用您的代码,您只得到4,因为您在“Declare”节点的子节点上在线循环,这些子节点是4。GokulAsGokul1、GokulAsGokul2、GokulAsGokul3和GokulAsGokul4。

运行良好,Alex
count: 9