Java firebase节点为空时删除Android投票应用程序节点

Java firebase节点为空时删除Android投票应用程序节点,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在设计一个投票应用程序。当用户提交投票时,其用户id存储在firestore数据库的相关节点下。如果用户决定更改其投票,则会删除其原始投票(即删除其用户id),并将其保存在其新投票选项的节点下。从本质上说,这是在覆盖他们的投票 我遇到的问题是,如果投票选项只有一票,并且由于用户更改其原始投票而被删除,则节点将被删除,并且该选项将从列表中完全删除。我将在下面举例说明 如果你看下面,你会发现布达佩斯和阿姆斯特丹原本各有一票。如果我最初的投票是布达佩斯,我决定将其改为克拉科夫,我的用户id将从布达

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

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

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

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


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

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

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

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

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

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

显示导致索引越界异常的代码..显示导致索引越界异常的代码。。