java - Firebase节点为空时删除Android投票应用程序节点
问题描述
我正在设计一个投票应用程序。当用户提交投票时,他们的用户 ID 存储在 firestore 数据库中的相关节点下。如果用户决定更改他们的投票,他们的原始投票将被删除(意味着他们的用户 ID 被删除)并保存在他们新投票选项的节点下。本质上,这是覆盖他们的投票。
我遇到的问题是,如果投票选项只有一票,并且由于用户更改了原始投票而将其删除,则该节点将被删除,并且该选项会从列表中完全删除。我将在下面进行说明。
如果你往下看,你会看到布达佩斯和阿姆斯特丹最初各有 1 票。如果我最初的投票是布达佩斯并且我决定将其更改为克拉科夫,我的用户 ID 将从布达佩斯节点中删除并添加到克拉科夫节点,结果布达佩斯被删除并从列表中删除,因为它下面没有存储任何值. 这也导致索引越界异常。
我正在寻找一种解决方法,基本上我可以防止投票选项因没有投票而被删除。我希望这很清楚。任何帮助或建议将不胜感激。
解决方案
在数据库上,这是预期的行为:一个键只有在它下面有一个值时才存在。一旦键下的最后一个值被删除,该键也会自动删除。
无法在数据库中更改此行为,因此您必须:
- 通过处理数据的缺失,在您的代码中处理它。这仅在您预先知道节点名称时才有效。
- 否则,您需要确保节点始终具有防止它们被删除的值。这可以是
true
您的代码识别为“没有投票”的简单标记值(即 ),或者您可以将选项放在单独的位置作为节点的值,并将投票本身保留为您现在拥有的投票。
推荐阅读
- sql - SQL 排除条件值
- spring-boot - Spring 如何知道在哪里搜索组件或 Bean?
- java - 在线程“main”java.lang.NoClassDefFoundError:scala/Function1$class 中获取 Akka 流代码时出错
- python - 创建一个可以创建多个类的python脚本
- python - 旋转的图片不显示在烧瓶中
- python - 当我打开 Jupyter 时,如何将 Anaconda 中的不同环境设置为默认使用不同版本的 Python?
- spring-boot - 记录 Web 依赖的条件评估报告
- java - JavaFx:如何拆分字符串并在 UI 上显示拆分字符(“:”)
- typescript - 如何测试已被调用或未调用的函数
- android - React - 错误:包 expo.modules.updates 不存在