Java 使用Firebase ChildEventListener的问题
我一直在尝试将Firebase实时数据库中的信息提取到桌面Java应用程序中,我对Java 使用Firebase ChildEventListener的问题,java,firebase,firebase-realtime-database,Java,Firebase,Firebase Realtime Database,我一直在尝试将Firebase实时数据库中的信息提取到桌面Java应用程序中,我对ChildeventListener的工作原理感到困惑 public void getInformation(){ DatabaseReference ref = FirebaseDatabase.getInstance() .getReference().child("Users/Informatique/LFI1"); Query myq = ref.orderByChild("Pres
ChildeventListener
的工作原理感到困惑
public void getInformation(){
DatabaseReference ref = FirebaseDatabase.getInstance()
.getReference().child("Users/Informatique/LFI1");
Query myq = ref.orderByChild("Presences");
myq.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
Map <String, String> map = new HashMap <String, String>();
map = (Map<String, String>) snapshot.child("Presences").getValue();
for(Map.Entry<String,String> entry : map.entrySet()){
System.out.println(entry.getValue());
list.add(entry.getValue());
}
}
});
System.out.println(list.size());
}
如何打印列表的大小,然后在地图上循环;这是我不清楚的关于听众是如何工作的。非常感谢。您现在无法获得尚未加载的列表的大小。换句话说,您不能简单地在
onchildaded()
方法之外调用list.size()
,因为由于此方法的异步行为,它将始终是0
。这意味着,当您试图获取该方法之外的列表大小时,数据尚未从数据库加载完毕,这就是为什么该大小始终为0
。这个问题的一个快速解决方法是只在onchildaded()
方法内部使用list.size()
,或者如果您想在外部使用它,我建议您查看我的anwser的最后一部分,在这部分中,我演示了如何使用自定义回调。您还可以查看此,以便更好地理解。请记住,onDataChange()
方法与onChildaded()方法具有相同的行为
0
< 12345678 Skander Maranissi LFI1 Wed May 02 15:52:03 GMT+01:00 2018 >
< 12345678 Mohsen Yajour LFI1 Wed May 02 15:09:32 GMT+01:00 2018 >
< 12345678 Lebron James LFI1 Wed May 02 16:51:35 GMT+01:00 2018 >
< 12345678 Lebron James LFI1 Sat May 05 12:54:02 GMT+01:00 2018 >