Android 如何同时实时侦听多个Firebase实时数据库节点?

Android 如何同时实时侦听多个Firebase实时数据库节点?,android,firebase,kotlin,firebase-realtime-database,Android,Firebase,Kotlin,Firebase Realtime Database,我正在开发一个应用程序,每个用户都可以参加几个聊天组。当打开每个聊天时,我在数据库中写下该消息是由用户读取的。现在,我需要实时知道我参与的任何组是否有未读消息,并将结果放入布尔hasnreadchats。如何在同一时间收听所有聊天,并找出是否有未读消息 数据库: { "myGroups" : { "userA" : { "-GROUPABC" : true, "-GROUPCDE" :

我正在开发一个应用程序,每个用户都可以参加几个聊天组。当打开每个聊天时,我在数据库中写下该消息是由用户读取的。现在,我需要实时知道我参与的任何组是否有未读消息,并将结果放入
布尔hasnreadchats
。如何在同一时间收听所有聊天,并找出是否有未读消息

数据库:

{
"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
        }
      }
  }
}

侦听父节点,然后遍历子节点,完成后更新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...

对象:ValueEventListener{
覆盖数据更改(dataSnapshot:dataSnapshot){
val reads=dataSnapshot.getValue()
var hasUnread=reads.values().firstOrNull{it.not}?:false
//更新用户界面
}
一旦取消。。。
因此,您的
dataSnapshot
是一个映射,其中键是聊天id,值是if has read or not。在Kotlin映射中,您可以获取值,然后查找是否存在任何条件,条件
为true
,在本例中只需
它。not
因为是布尔值。如果有
false
则至少有1个未读

我假设正确的引用是
myGroups/{uid}/{chatId}