2017-07-10 33 views
0

我目前正在使用函數updateChildren()設置多個路徑中的值。updateChildren覆蓋Android上的現有數據Firebase

當我的哈希映射具有所有必需的條目5項時,寫入數據庫發生沒有問題。

但是,如果我只需要更新我的哈希映射中的值(用4個項目繪製),則我的哈希映射中不存在的每個值都會在我的數據庫上被擦除。 (我的值imageURL被刪除數據庫,因爲該值不存在於我的散列表中)。

從文檔看來,只有當某個鍵的值爲空時,特定節點上的值纔會被刪除。隨着我在做什麼,當我的設備上的值爲空時,我將它排除在我的哈希映射中。

我在做更新我的孩子值有問題嗎?

All populated values writing to the database Selectively populated values, sans imageURL, which writes to the database but erases the already existing value for 'imageURL'

+0

請分享我們一些代碼。 –

回答

0

包括密鑰和舊值。或者重寫你的更新函數,在Hasmap的循環中逐個設置值。請注意,當您在數據庫引用中使用put值編寫hashmap時,原始內容將被刪除,並且新內容將被插入到該位置。換句話說,數據庫引用上的putValue會刪除引用的所有子節點,然後它會寫入提供的hasmap中可用的子節點。請看下面的例子:

map.add ("id", 1); 
map.add ("msg", "hello"); 
dbRef.putValue (map); 
map.clear(); 
map.add ("msg", "world"); 
dbRef.putValue (map); 

現在dbRef節點看起來像

dbRef: 
      msg : world 

id已經不在那裏。

編輯

由於這是公認的答案,所以我增加了一些參考,以正式找到相同。從docs

對於基本的寫操作,您可以使用的setValue()將數據保存到指定的參考,替換現有數據在這條道路。

+0

感謝您的回答,Virendra!不幸的是,hashmaps取代了現有的價值觀,這不是iOS Firebase的工作方式,所以我很吃驚。我必須按照你的建議去解決它。我感謝您的幫助。 – baQer

+0

Firebase文檔也具有誤導性......正如文檔中所述,'要同時寫入節點的特定子節點而不覆蓋其他子節點,請使用updateChildren()方法。'但是,當您使用updateChildren()方法和他們顯示的哈希映射示例時,您會覆蓋您的子節點。 – baQer