Android 为什么我的值路径是错误的-我得到空值

Android 为什么我的值路径是错误的-我得到空值,android,firebase,Android,Firebase,我有以下数据库: database | places | |____user1 | |_____outside: "yes" | |____user2 |_____outside: "no" 我是这样获取数据的: mDatabaseReference = FirebaseDatabase.getInstance().getReference("places"); V

我有以下数据库:

database
    |
    places
       |  
       |____user1
       |      |_____outside: "yes"
       |
       |____user2
              |_____outside: "no"
我是这样获取数据的:

mDatabaseReference = FirebaseDatabase.getInstance().getReference("places");

ValueEventListener placesListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {                
                for(DataSnapshot datas: dataSnapshot.getChildren()){
                    //this won't work
                    String place = datas.child("user1").child("outside").getValue().toString();

            }
mDatabaseReference.addValueEventListener(placesListener);
但它不起作用,当我启动我的应用程序时,我发现它是空的,应用程序崩溃了

日志崩溃,按要求:

Process: com.example.places, PID: 32431
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    at com.example.places.MainActivity$1.onDataChange(MainActivity.java:44)
    at com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.3:75)
    at com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.3:63)
    at com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.3:55)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
dataSnapshot.getChildren当前迭代您所在位置的所有子项

目前您有user1和user2

当您像现在这样在for循环中迭代它们时

String place = datas.child("user1").child("outside").getValue().toString();
当datas.childuser1不存在时,您最终将尝试查找它

在for循环中,您可以使用

datas.child("outside").getValue().toString();
如果您记录此日志,您将发现打印的第一个user1外部值,然后是user2

如果需要user1,可以添加一个If语句,在其中检查密钥

if(datas.getKey().toString().equals("user1"))

然后做你需要的。user1不应硬编码,而应为获取所需用户的参数。

发布崩溃日志plz,并在开始ForEach之前添加ifdataSnapshot.exists谢谢,我将添加。在添加check it crash后还添加了崩溃日志?是否尝试记录for循环值?您正在运行,并且在某个点上它将没有user1,dataSnapshot.getChildren->正在检查user1和user2,在for循环中尝试并记录它。datas.childoutside.getValue.toString;