我在for循环中使用数据库ref,但是没有获取数据?

时间:2019-06-15 23:37:47

标签: android firebase firebase-realtime-database

这是我的功能:

private void getOrderID() {

    for (int i = 0; i < userID.size(); i++) {
        databaseReference.child(opearatorID).child(userID.get(i)).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    keyStatusRelation.put(childSnapshot.getKey(),childSnapshot.getValue(Order.class).getStatus());
                }
                loadData();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }

}

此功能出现错误 因为数据没有加载到Firebase中

 public static void loadData() {

    for (int i=0;i<userID.size();i++){
        statusRefrenceLiving.child(userID.get(i)).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Order order = childSnapshot.getValue(Order.class);
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("0")||keyStatusRelation.get(childSnapshot.getKey()).equals("2")){
                        bookingmList.add(order);
                        bookingrecyclerView.setAdapter(bookingAdapter);

                    }
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("1")){
                        bookedmList.add(order);
                        bookedrecycleView.setAdapter(bookedAdapter);

                    }
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("3")){
                        LivingmList.add(order);
                        LivingrecycleView.setAdapter(livingAdapter);

                    }

                }

            }
            @Override
            public void onCancelled (@NonNull DatabaseError databaseError){

            }
        });

    }

}

这是logcat

  

进程:com.teepe.teepestaysmasterapp,PID:6867       java.lang.NullPointerException:尝试在空对象引用上调用接口方法'java.lang.Object java.util.Map.get(java.lang.Object)'           在com.teepe.teepestaysmasterapp.MainActivity $ 4.onDataChange(MainActivity.java:187)           com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database @@ 17.0.0:75)           com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database @@ 17.0.0:63)           com.google.firebase.database.core.view.EventRaiser $ 1.run(com.google.firebase:firebase-database @@ 17.0.0:55)           在android.os.Handler.handleCallback(Handler.java:751)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:154)           在android.app.ActivityThread.main(ActivityThread.java:6077)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

它只是循环到第二行而没有输入onDataChange,有人可以告诉我是什么问题吗?

1 个答案:

答案 0 :(得分:0)

从Firebase异步加载数据。这意味着在加载数据时,您的主代码会继续。然后,当数据可用时,您的onDataChange被调用。

这意味着您无法使用调试器进入onDataChange,因为数据尚不可用。如果要查看调试器在onDataChange中会发生什么,请在方法的第一行上放置一个断点,然后让调试器继续。其中一个数据可用,将调用onDataChange,然后命中断点。