java - Firebase:dataSnapshot 上的循环仅执行一次
问题描述
以下是我的Firebase 数据库图:
根元素links有三个子元素。当我执行以下循环以获取所有孩子时,它仅返回第一个孩子的结果
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("links");
int count=0;
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString()); //This gives result for all children
for (DataSnapshot ds : dataSnapshot.getChildren()) {
count++;
}
Log.d("Firebase","Count length: "+count); //Gives only "1"
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
在上面的代码中count
应该是 3 但它返回 1。循环只执行一次。
但是,上面代码中的以下行正常工作,并为所有 3 个孩子提供了结果。
Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString());
问题出在哪里?感谢您的回答!
解决方案
如果您想获取 下的孩子数links
,请尝试以下操作:
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d("Firebase","Children: "+dataSnapshot.getChildren().toString()); //This gives result for all children
long childCount = dataSnapshot.getChildrenCount();
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
getChildrenCount()
links
在这种情况下,将返回然后直接子项的数量3
。
推荐阅读
- android - 如何在同一活动中显示网站?
- android - InputTextLayout 需要点击 2 次才能响应 onclick
- android - 为什么 UI 不能正常显示?
- php - Vuejs2 - 如何使用 $(this).val()
- uwp - Windows ML - ONNX - HRESULT 异常:0x88900105
- java - Java JNA - 检测注册表值何时更改
- python - 没有scapy模块的python dns嗅探器
- android - FusedLocationProvider 返回 null
- asp.net-core - Visual Studio 2017 显示 Blazor 错误但编译
- php - 克隆 Laravel 项目并安装 composer 和 npm 然后也给我错误 500 page not found