2016-12-17 59 views
1

呼叫:結算的HashMap updateChildren打破了功能後直

HashMap<String, Object> updates = new HashMap<String, Object>(); 
updates.put(myKey, null); 
mDatabase.updateChildren(updates); 
updates.clear(); 

不從的myKey位置執行期望值去除。它可以通過克隆updates HashMap中很容易解決,美其名曰:

mDatabase.updateChildren(new HashMap<String, Object>(updates)); 

這是一個錯誤或預期的行爲?有關於它的文檔嗎?

回答

1

該更新以異步方式發送到Firebase數據庫。在更新完成之前,您不應修改傳遞給Firebase的地圖。

這很容易與updateChildren() method that takes a completion listener做):

mDatabase.updateChildren(updates, new DatabaseReference.CompletionListener() { 
    @Override 
    public void onComplete(DatabaseError error, DatabaseReference ref) { 
     if (error == null) { 
      updates.clear(); 
     } 
    } 
}); 
+0

感謝的建議,我將它移到完成監聽器。說到這一點,因爲它的回調參數是數據庫根目錄下的DatabaseReference,這是否意味着它在執行updateChildren之後實際下載了整個數據庫?該文檔通常建議只獲取儘可能最小的樹,因此具有該根DatabaseReference使我想再次檢查DataSnapshot是否與其一起被取回 – Voy

+1

一旦您附加了一個偵聽器,引用只會下載數據。 –

+0

太好了,謝謝澄清! – Voy