Android Firebase更新列表值

Android Firebase更新列表值,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,有以下数据结构: categories 0 : category1, 1 : category2, 2 : category3 我想同时向该结构添加值。 看起来updateChildren()方法将用新的列表替换列表 Map<String, Object> childUpdates = new HashMap<>(); FirebaseDatabase.getInstance().getReference().u

有以下数据结构:

 categories
      0 : category1,
      1 : category2,
      2 : category3
我想同时向该结构添加值。 看起来updateChildren()方法将用新的列表替换列表

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

实现这一点的最佳实践是什么?

您应该更改数据结构,使0、1、2、3等成为索引,而不是键值对的键。。。所以它看起来像:

 categories:
      0:
          name:category1,
      1:
          name:category2,
      2:
          name:category3
那是个坏习惯。(要找出原因,请看)和。不要使用
0:
1:
等,而是使用Firebase
push()
方法。它生成一个唯一的密钥,如
-K9929EDDJDODAK939
。您的结构将如下所示:

categories:
   -K9929EFDADFAK939: category 1,
   -DFADF9ADFFDF: category 2,
    K99DF9EDDJDO9: category 3
ref.child("categories").push().setValue(valueOrHasMap);
为此,在将它们保存到数据库中时,请使用
push()
方法,如下所示:

categories:
   -K9929EFDADFAK939: category 1,
   -DFADF9ADFFDF: category 2,
    K99DF9EDDJDO9: category 3
ref.child("categories").push().setValue(valueOrHasMap);
您不需要使用
updateChildren()
,只需像我提到的那样保存它们。它将继续保存,不会替换任何现有的

要了解更多信息,您应该阅读,尤其是如何使用此方法


有关在Firebase中避免阵列的更多信息:(感谢@Wiliks的链接)

我是否误解了你的问题?@AbAppletic你的答案基本相同。我的观点被编入索引与未编入索引。我从来没有说过索引确实需要被称为“0”、“1”或“2”,但非高级用户会这样认为。我的回答比你解释的解释得更清楚。你同时强调的意思是什么?你的意思是想更新单个类别的名称,而不必同时更新所有类别?@BooberBunz idk,但我肯定他混淆了数据结构。@BooberBunz一些用户可能会添加或删除此数据结构中的项。@dmreshet我帮了你吗?留下一个链接到一篇旧的官方博客文章,关于为什么我们应该避免firebase数据库中的数组@Wilik I将包含你的链接,谢谢你的合作