簡體   English   中英

盡管Firebase參考可以,但出現null錯誤-

[英]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中的輸出將是用戶的確切countrycity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM