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;