当前位置: 首页 > 知识库问答 >
问题:

避免在Firebase事务中首次读取时获得空currentData

钦耀
2023-03-14

以下是我交易的相关部分:

var roomName = ""
database.getReference("rooms").runTransaction(object : Transaction.Handler {
    override fun doTransaction(currentData: MutableData): Transaction.Result {
        roomName = currentData.children.toList().randomOrNull()?.key //enter to a random existing room
            ?: database.getReference("rooms").push().key!! // or create one if there is no room
        //Do some stuffs depending on roomName, and update the currentData
        return Transaction.success(currentData)
    }
    override fun onComplete(error: DatabaseError?, committed: Boolean, currentData: DataSnapshot?) {
    }
}

第一次currentData是空的(事实上它不是空的--因为我用Kotlin编码--但没有改变我问的问题)。如果我在不关闭应用程序的情况下重新运行事务,现在CurrentData中有一个子项。

共有1个答案

子车文康
2023-03-14

在第一次调用DoTransaction时,CurrentData可能为空。这与数据库中数据的存在无关,而是与客户机中该数据的知识有关。它为空完全是意料之中的,您的代码应该处理它。

因此,如果现有数据不存在,事务应该做什么?即使只是让它为空也没关系,只要你做了一些有效的事情,它就会在下一次尝试(或之后的一次尝试)自动更正。

另见:

    null
 类似资料:
  • 我使用JQuery来处理我游戏中的所有按键,我的事件处理得很好,但我想限制玩家,因为如果他们按下一个键并按住它,它不会继续发射。 这是我当前的代码: 有人知道如何实现这样的东西吗?我找不到这样的东西。。。

  • 问题内容: 我正在研究从文件读取大量数据的应用程序。基本上,我有一个巨大的文件(大约1.5-2个演出),其中包含不同的对象(每个文件约5至1000万个对象)。我需要阅读所有内容,并将其放置在应用程序中的不同地图上。问题是该应用程序在某些时候读取对象时内存不足。仅当我将其设置为使用- Xmx4096m时,它才能处理该文件。但是,如果文件更大,它将无法再执行此操作。 这是代码片段: 首先,我使用的是

  • 我正在尝试从我的应用程序中获取数据。将内容配置文件详细信息转换为变量的yaml文件 应用yaml文件内容 应用程序。Java语言 输出: 您能帮助我理解为什么its没有从yaml文件中选取值吗?

  • 我想知道是否有可能在Java中“避免”空检查,以下面的代码为例: 它必须检查4次,否则代码将失败。 是否可以将语句转换为只有在没有NullPointerException时才执行的一行式语句?当出现异常时,该行应该被忽略。 这里我不是在谈论一个通用的语言特性,我是在谈论一个只有当您明确决定这样做时才会上交的特性。 例如:将是建议代码的一个片段。 在Java可能发生这样的事情吗? 如果不可能的话,在

  • 我正在使用Keycloak与Google作为身份提供商。我需要谷歌的刷新令牌来管理用户的日历。以下是我的Keycloak Google IDP设置: 登录后,我根据https://www . key cloak . org/docs/latest/server _ development/index . html # retrieving-external-IDP-tokens获取刷新令牌。看起来

  • 但是,如果camp.start_date为NULL或没有行,那么它将引发异常- ORA-01858:在需要数字的地方发现了一个非数字字符 camp.start_date实际上是一个VARCHAR2,我需要将它转换为日期(是的,我知道它可能应该是一个日期字段,但我没有更改它的选项)。 其中camp.start_date不为null并且to_date(camp.start_date,'mm/dd/yy