热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何正确更新firebaserealtimedatabase中的对象?

此刻,用户已存储在我的实时Firebase数据库中。用户类别包含:privateStringui

此刻,用户已存储在我的实时Firebase数据库中。

用户类别包含:

private String uid;
private UserPermissions userPermissions;
private List items;

列表 默认为空,这将导致以下数据库结构:

如何正确更新firebase-realtime-database中的对象?

按钮用于将项目添加到当前用户的列表中。

当前,我正在尝试通过整个用户对象来更新数据库,如下所示:

ref = FirebaseDatabase.getInstance().getReference().child("users");
[...]
Button dialogButton = (Button) dialog.findViewById(R.id.addItem);
dialogButton.setOnClicklistener(new View.OnClicklistener() {
@Override
public void onClick(View v) {
ref.setvalue(user);
dialog.dismiss();
}
});

结果如下:

如何正确更新firebase-realtime-database中的对象?

层次结构已损坏。

在不将整个用户对象设置为数据库的情况下,是否还有其他可能性可以更新现有用户的列表项?如果没有,怎么可能防止这个问题?

如何用where条件更新与MySQL语法相似的用户?

UPDATE `ingredients` SET `ingredient` = `new_value' WHERE `uid` = `PClW...`;

谢谢您的帮助!


请记住,在Firebase RTDB数据模型中,给定节点始终包含其所有子项,这可能会很有帮助。在Firestore中可能实际上没有表的概念,甚至没有“集合”的概念。

这很重要,因为您正在调用setValue(),它将调用它的引用设置为传递的确切值-它执行完全替换。用documentation的话来说:


  

以这种方式使用setValue()会覆盖指定位置(包括所有子节点)上的数据。

在这种情况下,您使用的引用指向users节点,而不是当前用户的节点。因此,您看到的是整个users节点被单个​​用户的值替换。

您有两个选择。

第一个也是最直接的方法是获取要更新的特定用户的节点的引用setValue

ref = FirebaseDatabase.getInstance().getReference()
.child("users").child(uid);

请注意,这里的uid实际上是您要更新的节点(在本例中为-LuxronyXRi8s85SBvVf)的。它不是该节点的uid子节点的值。如果您由于不知道而需要查找密钥,则需要自己遍历users节点的所有子级,直到找到它为止,或者尝试通过filter query查找它。

当然,我们不能保证(至少不是Firebase RTDB提供的任何保证)只有一个子节点具有该特定的uid值。

此外,如果您只想更新用户节点下的一个字段,则只需获取对该字段的引用即可(同样,此处的uid指向您要更新的节点的 key ):

ref = FirebaseDatabase.getInstance().getReference()
.child("users").child(uid).child("userPermissions");

或者,如果您要写入一个节点的多个子节点,而又不改变其他子节点的位置,则可以使用updateChildren()。请参阅文档here和reference here。可以将子路径映射到要更新的值,但是这种情况可能比您需要的复杂,因为您似乎正试图完全更新一个用户。


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
author-avatar
太完美无缺_817
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有