Firebase更新列表值

时间:2016-09-18 08:38:44

标签: android firebase firebase-realtime-database

有数据结构:

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

我想同时为此结构添加值。 看起来updateChildren()方法将用新的替换list。

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

实施此操作的最佳做​​法是什么?

2 个答案:

答案 0 :(得分: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

有关在Firebase中避免使用阵列的更多信息:(感谢@Wiliks提供链接)Best Practices: Arrays in Firebase

答案 1 :(得分:0)

您应该更改您的数据结构,以便您的0,1,2,3等是INDEXES而不是键值对的KEY ...所以它看起来像:

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