2017-04-23 92 views
-1

我對Firebase有點新鮮,所以一直在玩弄自己,以幫助自己更熟悉它。所以,當我玩弄實時數據庫時,我試圖將數據追加到JSON樹中。代碼如下Firebase覆蓋現有記錄而不是追加它們

mSaudi.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      count++; 
      mHistory = mChildRef.child(Integer.toString(count)); 
      current = riyadh; 
      mChildRef.setValue(riyadh); 
      mHistory.push().setValue("riyadh"); 
     } 
    }); 

,我需要的是這樣的樹:

value: 
1: some text 
2: some other text 

但是,什麼是實際發生的情況是這樣的:

value: 
    1: some text 

和更新用

value: 
    2:some text 

previous en嘗試被刪除

我試圖以各種方式更改引用,但無濟於事。任何幫助在這方面將不勝感激。

+0

@downvoters請解釋。 –

回答

0

當您在Firebase上設置一個值時,它將替換參考文獻中的所有內容。

比方說,你有一個房子的價值,與2個孩子:顏色大小

如果您只想編輯顏色值,在setValue()之前,您將不得不更改要推送的參考。

如果您的參考文獻是getReference().child("houses"),並且您在那裏推動某些內容,那麼它將替換它下面的所有內容。做到這一點的方法是創建一個新的參考(或更新預覽之一),如下所示:getReference().child("houses").child(houseKey).child("color")並將您的字符串推送到那裏。

在您的示例中,您需要在方法push()之前添加想要更改爲小孩的字段。

另一種方式已被@ Janwilx72告知,並且正在獲取整個對象,在本地更新該值並再次推送整個對象。

1

如果您想要保存這兩個值,則必須使用變量(如Hashmap)保存這些值。如果保存一個字符串,然後嘗試在同一分支下保存另一個字符串,它將刪除以前保存的所有內容。因此請嘗試以下操作

HashMap<String, String> map = new HashMap<>(); 
map.put("1","String"); 
map.put("2","String"); 
mHistory.push().setValue(map); 

這樣可以保存兩個字符串而不刪除一個字符串。

如果您只想添加一個字符串

mHistory.push().child("1").setValue("Your first String"); 

與這雖然最大的問題是你使用推(即每次)你生成一個隨機密鑰,所以你必須保存密鑰爲字符串並將其用作孩子的參考。

+0

這是有效的,但是可以在Firebase中添加新元素,而不必每次都必須將整個HashMap作爲新條目添加到數據庫中? –

0

你可以試試這個

mChildRef.child("2").setValue("some text");

應該追加新的項目,而不是覆蓋他們

相關問題