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}