2016-12-29 60 views
1

我有這樣的標準火力地堡電話:火力地堡ValueEventListener返回不存在的關鍵

ref.child("user/toys/-K2873267832") 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot != null) { 
      // wow the Data at Firebase database does not exist 
     } 
    } 
} 

的問題是,裁判"user/toys/-K2873267832"不存在。當我在console.firebase.google.com上刪除密鑰時,dataSnapshot應該沒有數據權限。即使是鑰匙user/toys也被刪除。

我一直在爲這個項目工作一個月,並且在複雜的數據庫中有很多ValueEventListener。這是我以前從未見過的東西。

什麼會導致這種情況發生?

+0

那麼dataSnapshot不等於null? – Lyla

+0

,DataSnapshot {key = -K2873267832,value = null} –

+0

查看答案已發佈;你會得到該位置的價值,但這是預期的。也預計它不會有價值。如果您試圖檢查某個位置是否存在,則可以這樣做 - 使用值事件偵聽器,然後查看數據是否爲空。 您也可以在父節點上執行調用,並使用'hasChild'方法查看它是否存在,如[此處]所述(http://stackoverflow.com/questions/37397205/google-firebase-check-if-兒童存在)。 – Lyla

回答

2

作爲每this post

甲ValueEventListener將帶有空值,如果沒有值 存在的位置處被調用。所以如果你也叫 addListenerForSingleValueEvent(),你可以檢測到該位置有 沒有值。

然後他說dataSnapshot.getValue()應該等於null。因此,當有效的dataSnapshot將被返回時,該快照的值將爲空。

+0

因此,dataSnapshot爲空的情況永遠不會發生? –

+0

謝謝我現在明白了 –