2016-09-18 131 views
1

有數據結構:火力地堡更新列表值

categories 
     0 : category1, 
     1 : category2, 
     2 : category3 

我想值同時添加到這個結構。 它看起來像updateChildren()方法將用新的替換列表。

 Map<String, Object> childUpdates = new HashMap<>(); 
    FirebaseDatabase.getInstance().getReference().updateChildren(childUpdates); 

實現此目的的最佳實踐是什麼?

+0

你說的同時,強調是什麼意思?你只是想要更新各個類別的名稱,而不必同時更新所有類別的名稱? –

+0

@BooberBunz idk,但我確定他混合了數據結構。 –

+0

@BooberBunz幾個用戶可能會添加或刪除項目到這個數據結構。 – dmreshet

回答

2

這不好的做法。 (要找出原因,請看here)和。而不是使用0:1:等,請使用Firebase push()方法。這會生成一個唯一的密鑰,如-K9929EDDJDODAK939。您的結構是這樣的:

categories: 
    -K9929EFDADFAK939: category 1, 
    -DFADF9ADFFDF: category 2, 
    K99DF9EDDJDO9: category 3 

對此,省時,那些到數據庫中,這樣的使用方法push()

ref.child("categories").push().setValue(valueOrHasMap); 

你並不需要使用updateChildren(),只是將它們保存像我提到的那樣。它將繼續保存並不會取代任何現有的。

有關更多信息,您應該閱讀docs,尤其是在使用此方法時如何retrieve data

有關避免陣列在火力地堡的更多信息:(感謝@Wiliks的鏈接)Best Practices: Arrays in Firebase

+2

留下一個舊的官方博客文章的鏈接,爲什麼我們應該避免在Firebase數據庫中使用陣列[最佳實踐:Firebase中的陣列](https://firebase.googleblog.com/2014/04/best-practices-arrays-in- firebase.html) – Wilik

+0

@Wilik我會加入你的鏈接,表示你的合作 –

0

你應該改變你的數據結構,使您的0,1,2,3等都是指標,而不是一個鍵值對的鍵...所以它看起來像:

categories: 
     0: 
      name:category1, 
     1: 
      name:category2, 
     2: 
      name:category3 
+0

這是在文檔中說的不好的做法。 –

+0

我誤解了你的問題嗎? –

+0

@AbAppletic你的答案基本上是一樣的。我的觀點是索引而不是索引。我從來沒有說過索引需要被稱爲「0」「1」或「2」 –