这是我的功能:
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,有人可以告诉我是什么问题吗?
答案 0 :(得分:0)
从Firebase异步加载数据。这意味着在加载数据时,您的主代码会继续。然后,当数据可用时,您的onDataChange
被调用。
这意味着您无法使用调试器进入onDataChange
,因为数据尚不可用。如果要查看调试器在onDataChange
中会发生什么,请在方法的第一行上放置一个断点,然后让调试器继续。其中一个数据可用,将调用onDataChange
,然后命中断点。