2016-03-25 60 views
1

我在Firebase上的valueEvenListener存在問題。考慮這種情況:Firebase updatechildren vs setvalue

Firebase ref = new Firebase(Constant.BASEURL).child("myLists"); 
ref.addValueEventListener(myValueEventListener); 

然後我嘗試使用updateChildren()更新其中一個列表值。

HashMap<String, Object> newEditionTimeHM = new HasMap<String, Object> 
newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP); 

ref.child(pushKey).updateChildren(newEditionTimeHM); 

它更新,​​但是當我的聽衆抓住了更新,它崩潰報告「未能反彈鍵入」錯誤。

在我第二次嘗試時,我用新值創建了一個新的shoppinList對象,並使用setValue()來推送它。

newEditionTimeHM.put("editionTimeStamp", ServerValue.TIMESTAMP); 
ShoppingList shoppingList = new ShoppingList("Owner unknown", newEditionTimeHM); 

ref.child(pushKey).setValue(shoppingList); 

當我的聽衆抓住它時,沒有問題被報告。

這裏有什麼不同?爲什麼我需要創建一個全新的對象來滿足聽衆?使用updateChildren()更高效嗎? 搜索this page作爲答案,但沒有找到它。

+0

如果它「無法反彈類型」,則其中一種情況下的結果數據(onDataChange)可能與其他情況不同。檢查調試有什麼區別並得出結論。 – Wukash

+0

@Wukash我查過了。這兩種方法應該完全一樣。證明這一點的是,當我檢查我的Firebase最終結果時,我使用第一種方法或第二種方法得到完全相同的結果。區別在於聽者如何反應。 –

+0

是的我明白服務器上的值在最終結果中是相同的。我說的是你應該檢查聽衆方法有什麼不同,並採取相應的行動。我的意思是我們不能改變firebase庫的行爲,所以這是你唯一的選擇...... – Wukash

回答

2

ServerValue.TIMESTAMP具有類型爲Map<String, String>,所以我想,如果你的pushKey是"<your Firebase URL>/myLists"在火力地堡你的數據結構與此有關:

"myLists": { 
    "editionTimeStamp": { 
     "timeStampKey": "timeStampValue" 
    } 
} 

所以,如果你想獲得TIMESTAMP價值,我建議你先嚐試必須是:

ref.child("<your Firebase URL>/myLists/editionTimeStamp/timeStampKey"); 
ref.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     String timeStampValue = (String)snapshot.getValue(); 
    } 
    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
     System.out.println("The read failed: " + firebaseError.getMessage()); 
    } 
}); 

如果它不是你的解決方案,這裏是這個錯誤的一個很好的解釋:Why do I get "Failed to bounce to type" when I turn JSON from Firebase into Java objects?
希望它他lp:D

0

好的。發現問題。我意識到讀取this page和上面的答案,我誤解了Firebase偵聽器的工作方式。對setValue()和updateChildren()有不同的反應。請確保在更新後檢查您需要的值,並相應地使用ChildEventListener或ValueEventListener。 生活又好又來了!乾杯!

+0

謝謝@johny。我會牢記這一點。 –

相關問題