Java 使用Firebase ChildEventListener的问题

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

我一直在尝试将Firebase实时数据库中的信息提取到桌面Java应用程序中,我对
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 >