2017-08-13 107 views
1

我有了這個數據庫: enter image description here火力地堡數據庫快照返回null

和驗證碼:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference dataRef = database.getReference(); 
number = dataRef.child("planlekcji3").child("Monday").child("lessons"); 
number.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     n = snapshot.getValue(String.class); 
     number.setValue(Integer.parseInt(n)+1); 
    } 

    public void onCancelled(DatabaseError error){ 

    } 
}); 
dataRef.child("planlekcji3").child("Monday").child(n).setValue(newLesson); 

我得到這個錯誤:

java.lang.NullPointerException: Can't pass null for argument 'pathString' in child()

這樣的 「n」變量爲null, 我的代碼有什麼問題?

+1

是否嘗試敬酒「n」? –

+1

newLesson.getDay()或n爲空...請確保在日誌或祝詞中顯示 –

+0

我已將newLesson.getDay()更改爲某個字符串,並且仍然出現錯誤,因此「n」爲空 – Jkrr

回答

1

您應該將setValue右部分放入onDataChanged。由於n中發生在onDataChanged內的Firebase偵聽器的異步性質不會在原子級外部反映出來。

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference dataRef = database.getReference(); 
number = dataRef.child("planlekcji3").child("Monday").child("lessons"); 
number.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     n = snapshot.getValue(String.class); 
     number.setValue(Integer.parseInt(n)+1); 
    dataRef.child("planlekcji3").child("Monday").child(n).setValue(newLesson); 
    } 

    public void onCancelled(DatabaseError error){ 

    } 
}); 

希望有幫助!