2016-09-18 134 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” –