首页 > 解决方案 > Firebase节点为空时删除Android投票应用程序节点

问题描述

我正在设计一个投票应用程序。当用户提交投票时,他们的用户 ID 存储在 firestore 数据库中的相关节点下。如果用户决定更改他们的投票,他们的原始投票将被删除(意味着他们的用户 ID 被删除)并保存在他们新投票选项的节点下。本质上,这是覆盖他们的投票。

我遇到的问题是,如果投票选项只有一票,并且由于用户更改了原始投票而将其删除,则该节点将被删除,并且该选项会从列表中完全删除。我将在下面进行说明。

如果你往下看,你会看到布达佩斯和阿姆斯特丹最初各有 1 票。如果我最初的投票是布达佩斯并且我决定将其更改为克拉科夫,我的用户 ID 将从布达佩斯节点中删除并添加到克拉科夫节点,结果布达佩斯被删除并从列表中删除,因为它下面没有存储任何值. 这也导致索引越界异常。

我正在寻找一种解决方法,基本上我可以防止投票选项因没有投票而被删除。我希望这很清楚。任何帮助或建议将不胜感激。

在此处输入图像描述

在此处输入图像描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


在数据库上,这是预期的行为:一个键只有在它下面有一个值时才存在。一旦键下的最后一个值被删除,该键也会自动删除。

无法在数据库中更改此行为,因此您必须:

  • 通过处理数据的缺失,在您的代码中处理它。这仅在您预先知道节点名称时才有效。
  • 否则,您需要确保节点始终具有防止它们被删除的值。这可以是true您的代码识别为“没有投票”的简单标记值(即 ),或者您可以将选项放在单独的位置作为节点的,并将投票本身保留为您现在拥有的投票。

推荐阅读