我的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();
}
});发布于 2021-05-21 15:00:33
为了解决这个问题,你应该通过在"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!
}
}
});logcat中的结果将是:
count: 9使用您的代码,您只会得到4,因为您在"Declare“节点的子节点上进行了在线循环,它们是4. GokulAsGokul1、GokulAsGokul2、GokulAsGokul3和GokulAsGokul4。
https://stackoverflow.com/questions/67617665
复制相似问题