updateChildren覆盖Android Firebase上的现有数据

时间:2017-07-10 20:44:35

标签: android firebase firebase-realtime-database

我目前正在使用函数updateChildren()在多个路径中设置值。

当我的哈希映射具有所有必需的条目,5个项目时,对数据库的写入发生没有问题。

但是如果我只需要更新哈希映射中的值(如图4所示),则哈希映射中不存在的每个值都会在我的数据库中被删除。 (我的imageURL值在数据库中被删除,因为我的hashmap中不存在该值)。

从文档中可以看出,只有当键的值为null时,才会删除特定节点的值。根据我正在做的事情,当我的设备上的值为null时,我将其排除在哈希映射中。

我在更新孩子的价值观时出了什么问题?

All populated values writing to the database Selectively populated values, sans imageURL, which writes to the database but erases the already existing value for 'imageURL'

1 个答案:

答案 0 :(得分:0)

包含密钥和旧值。或者,重写更新函数以在Hasmap的循环中逐个设置值。请注意,在数据库引用上使用put值编写散列映射时,将删除原始内容并在该位置插入新内容。换句话说,数据库引用上的putValue删除引用的所有子项,然后它会在所提供的hasmap中写入可用的子项。请考虑以下示例:

map.add ("id", 1);
map.add ("msg", "hello");
dbRef.putValue (map);
map.clear ();
map.add ("msg", "world");
dbRef.putValue (map);

现在dbRef节点看起来像

dbRef:
           msg : world

id不再存在。

修改

由于这是接受的答案,所以我正在添加一些参考资料以正式找到相同的答案。来自docs

  

对于基本的写入操作,您可以使用 setValue()将数据保存到指定的引用,替换该路径上的任何现有数据