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);