Java 尽管firebase引用正常,但获取null错误-
我得到Java 尽管firebase引用正常,但获取null错误-,java,android,firebase,android-studio,nullpointerexception,Java,Android,Firebase,Android Studio,Nullpointerexception,我得到java.lang.NullPointerException:当我的代码到达valueEventListener时,无法为child()中的参数“pathString”传递null,尽管在调试时,我觉得子值不是null 以下是代码的图像: 以下是数据库的外观: 通过完全删除代码并重新启动解决了问题。这次我检查了firebase github,我是这样做的(基本上是一样的?我希望我知道我的第一个代码出了什么问题): 使用getValue(String.class)而不是getValue(
java.lang.NullPointerException:当我的代码到达valueEventListener时,无法为child()中的参数“pathString”传递null
,尽管在调试时,我觉得子值不是null
以下是代码的图像:
以下是数据库的外观:
通过完全删除代码并重新启动解决了问题。这次我检查了firebase github,我是这样做的(基本上是一样的?我希望我知道我的第一个代码出了什么问题):
使用
getValue(String.class)
而不是getValue().toString()代码>在显示的代码中,您可以通过该消息获得NPE的唯一位置是在呼叫中:
...child("users").child(uid);
因此,我会检查uid变量,找出一种处理这种情况的方法(uid==null)
您正在使用不必要的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中的输出将是您用户的准确的国家
和城市
。请尝试将您的代码作为文本而不是图像。对不起,stackoverflow的新手。。我应该现在编辑吗?但是如果我在那行之前或之后记录uid,它会打印出我需要的确切uid。它不是空的。谢谢。这个循环确实没有必要,但是移除它并没有解决我的问题是的!我同时编辑了我的文章。它确实是这样工作的:)谢谢
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);