Firebase Android - updateChildren 在嵌套 JSON 结构中写入键值

Posted

技术标签:

【中文标题】Firebase Android - updateChildren 在嵌套 JSON 结构中写入键值【英文标题】:Firebase Android - updateChildren owerwrites key-values in nested JSON structure 【发布时间】:2020-12-17 11:18:12 【问题描述】:

我试图找到有关以下问题的答案 - 在类似的问题中找到了几个但仍然无法解决。如果我将结构展平,它似乎可以工作,但为什么呢?

基本上 - 我如何在 Firebase 的 json 对象中添加更多键值对而不覆盖现有键值对?

假设我有以下 jsonstructure

 "groups" : 
"aw" : 
  "members" : 
    "Lisa" : "true"
  ,
  "name" : "aw university"

然后如何在成员中添加更多键值对而不覆盖现有键值对?例如,我想再添加一个成员 - Magnus,这样对象就变成了:

 "groups" : 
"aw" : 
  "members" : 
    "Lisa" : "true",
    "Magnus" : "true"
  ,
  "name" : "aw university"

我尝试过 updateChildren 没有成功:

var hm = HashMap<String, Any>()
hm.put("magnus", "true");
database.child("groups").child("aw").child("members").updateChildren(hm)

发生的情况是现有的键值(Lisa: true)被覆盖

这个问题有简单的解决方案吗?

奇怪的是,如果结构被展平 - updateChildren 工作并添加 Magnus

  "groups" : 
"aw" : 
  "name" : "aw university"
,
"members" : 
  "Lisa" : "true",
  "Magnus" : "true"

但我希望“members”成为“aw”的孩子

【问题讨论】:

第一行应该完全符合您的要求,因为它与database.child("groups").child("aw").child("members").child("magnus").setValue(true) 完全相同。你确定你在正确的节点上调用它吗?有什么方法可以添加更多调试信息来显示正在发生的事情? 【参考方案1】:

试试这个database.child("groups").child("aw").child("members").setValue(hm);

【讨论】:

以上是关于Firebase Android - updateChildren 在嵌套 JSON 结构中写入键值的主要内容,如果未能解决你的问题,请参考以下文章

安装Firebase后运行pod install --repo-update时出错

随着 Android Studio 4.1 更新 'Plugin incompatible with the new build found: Firebase Services' 出现警告信息

Firebase 更新与设置

如何归功于 Firebase 和 Android 支持库?

使用 Android Firebase 堆栈推送通知

从firebase检索数据到android