【问题标题】:How to listen to several Firebase Realtime Database nodes at the same time and in real time?如何同时实时监听多个 Firebase 实时数据库节点?
【发布时间】:2021-04-15 15:06:09
【问题描述】:

我正在开发一个应用程序,每个用户都可以参与多个聊天组。打开每个聊天时,我都会在数据库中写入该消息已被用户阅读。现在我需要实时知道我参与的任何组是否有未读消息并将结果放入boolean hasUnreadChats。如何同时收听所有聊天并找出是否有未读消息?

数据库:

{
"myGroups" : {
    "userA" : {
      "-GROUPABC" : true,
      "-GROUPCDE" : true,
      "-GROUPFGH" : true
    },
    "userB" : {
      "-GROUPABC" : true
    }
  },
  "readMessagensGroups" : {
    "-GROUPABC" : {
      "-MSG1" : {
        "userA" : true,
        "userB" : true
      },
      "-MSG2" : {
        "userA" : true
      }
    },
    "-GROUPCDE" : {
        "-MSG1" : {
          "userA" : true,
          "userB" : true
        },
        "-MSG2" : {
          "userA" : true
        }
      }
  }
}

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    监听父节点并遍历子节点,完成后更新 UI

    object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            val reads = dataSnapshot.getValue<Map<String, Boolean>>()
            var hasUnread = reads.values().firstOrNull { it.not }  ?: false
            //update ui
        }
    
        override fun onCancelled...
    
    

    所以您的dataSnapshot 是一个映射,其中键是聊天 ID,值是是否已读取。在 Kotlin 映射中,您可以获取值,然后查找是否有任何符合条件 is true 在这种情况下只需 it.not 因为是布尔值。如果有 false,那么您至少有 1 个未读。

    我假设正确的参考是myGroups/{uid}/{chatId}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-01
      • 2021-04-16
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多