java我可以订购firebase addValueEventListeners,以便它们按特定顺序执行吗?
大家好,我正在Android Studio上用Java开发一个聊天应用程序,试图从firebase实时数据库读取数据,该数据库的结构如下
{
"Chats":{
"<chatID>":{
"<title>",
"<lastmessage>"
"<timestamp>"
"Users":{
"<user1ID>",
"<user2ID>"
}
}
},
"Users":{
"<userID>":{
"<name>",
"<email>",
"Contacts":{
"<contactID>",
},
"Chats":{
"<chatID>"
}
}
}
}
目前,我有3个独立的事件侦听器,它们将读取的数据添加到2D数组中
ArrayList<ArrayList<String>> chatsDetails; //[("chatID","timestamp",userUID","userName","userEmail"),...]
代码很长,但事件侦听器的标题(重现问题所需的最短代码)是这样的
/*Listener 1- populate ArrayList with chat ID from Firebase database*/
databaseReference.child("users").child(mAuth.getCurrentUser().getUid()).child("chats").addValueEventListener(new ValueEventListener() {
});
/*Listener 2- populate 2d ArrayList with users uid and timestamp from Firebase database*/
databaseReference.child("chats").addValueEventListener(new ValueEventListener() {
//requires the chat id from listener 1
});
/*Listener 2- whenever values under users changes, update user email and name in 2D array*/
databaseReference.child("users").addValueEventListener(new ValueEventListener() {
//requires the user uid from listener 2
});
具体问题: 问题是,当我对控制台进行日志记录时,我意识到侦听器并没有按照我要求的顺序运行。这会导致无法检索用户的姓名和电子邮件并将其存储到ArrayList中
期望的行为: 我想知道是否有办法让事件监听器一个接一个地运行(因此日志控制台应该显示按该顺序执行的监听器1、2、3)
我试图寻找OnCompleteListeners
,但找不到任何适合这个的,我尝试了嵌套addValueEventListeners
,但没有成功。问题是,当向数据库中添加一个新的侦听器时,它会同时触发所有3个侦听器,因此我不确定如何使它们按顺序工作。任何指导都将不胜感激,谢谢
# 1 楼答案
当数据库更新时,它会触发此函数运行。假设你在设备上有Firebase数据的副本 一切都正确同步,然后什么也没有发生(你不必使用互联网连接来获取数据,只需询问数据库是否进行了任何修改),现在你从数据库获得的所有数据都来自Firebase数据库的本地数据库版本。 这只是firebase系统工作原理的细节
如果插入了数据,则只会得到发生的修改+在“本地Firebase db”中未更改的数据。
所以现在,当“远程Firebase db”上发生修改时,您需要通过清除和重新填充将数据存储在列表中
然后处理设备上的列表