[英]Getting null error although firebase reference is ok -
我得到java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
当我的代码到达valueEventListener时, java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()
尽管在调试时,孩子的值似乎不为null。
这是代码的图像:
这是数据库的样子:
通过完全删除代码并重新启动来解决该问题。 这次我检查了Firebase github,并这样做了(几乎是同一回事?我希望我知道我的第一个代码出了什么问题):
userReference = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
ValueEventListener userListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Get user object
currentUser = dataSnapshot.getValue(User.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// [START_EXCLUDE]
Toast.makeText(UserAreaActivity.this, "Failed to load post.",
Toast.LENGTH_SHORT).show();
}
};
userReference.addValueEventListener(userListener);
在显示的代码中,唯一可以获得带有该消息的NPE的位置是在调用中:
...child("users").child(uid);
因此,我将检查该uid变量,找出一种处理这种情况的方法(uid == null)
。
使用getValue(String.class)
代替getValue().toString();
您正在使用不必要的for循环。您已经知道什么是用户uid。删除for循环,然后重试。
只需使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String country = dataSnapshot.child("country").getValue(String.class);
String city = dataSnapshot.child("city").getValue(String.class);
Log.d(TAG, country + " / " + city);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
logcat中的输出将是用户的确切country
和city
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.