android - valueEventListener onDataChanged 在更新子项后返回先前的值
问题描述
我正在开发一个应用程序,该应用程序在FirebaseDatabse
创建活动后更新某些数据()的值,即打开聊天屏幕会更新数据库值isSeen
to true
,但ref.child("path").addValueEventListener
onDataChange
在更新之前返回数据的先前值......它没有t 返回更新后的值
更新:
private fun seenMsg(userID: String){
seenListener = myRef.child("Chats").addValueEventListener(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError) {}
override fun onDataChange(p0: DataSnapshot) {
for (sp in p0.children){
val chat = sp.getValue(Chat::class.java)!!
Log.d("TAG", " MessageActivity VALUE : $chat ") // isSeen = false
if (chat.receiver.equals(firebaseUser!!.uid) && chat.sender.equals(userID)){
val cMap = HashMap<String, Any>()
cMap["isSeen"] = true
sp.ref.updateChildren(cMap)
Log.d("TAG", " MessageActivity AFTER UPDATING : $chat ") // isSeen still false here
}
}
}
})
}
检索数据:
private fun retrieveMsg(senderID: String, receiverID: String?, imageUrl: String) {
ref.child("Chats").addValueEventListener(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError) {}
override fun onDataChange(p0: DataSnapshot) {
chatList.clear()
for (sp in p0.children){
val chat = sp.getValue(Chat::class.java)!!
Log.d("TAG", " MessageActivity Retrieve : $chat ")
if ((chat.receiver).equals(senderID) && chat.sender.equals(receiverID)
|| chat.receiver.equals(receiverID) && chat.sender.equals(senderID)){
chatList.add(chat)
}
chatsAdapter = ChatsAdapter(this@MessageChatActivity, chatList, imageUrl)
recyclerView.adapter = chatsAdapter
}
}
})
}
日志猫:
2020-06-08 22:57:25.965 20668-20668/com.x.chatapp D/TAG: MessageActivity Retrieve : Chat(sender=ftTTpG0IJ8OKMFBMDaZ7fws28g02, message=1, receiver=R4scdWQFLzVLp8StLGzSqDJ6mBr2, url=, isSeen=false, messsageID=-M9Kigi8g92_yy9EWK9I)
2020-06-08 22:57:25.966 20668-20668/com.x.chatapp D/TAG: MessageActivity Retrieve : Chat(sender=ftTTpG0IJ8OKMFBMDaZ7fws28g02, message=2, receiver=R4scdWQFLzVLp8StLGzSqDJ6mBr2, url=, isSeen=false, messsageID=-M9Kigi8g92_yy9EWK9I)
isSeen
即使在数据库中为真,仍然是假的
解决方案
原来,我不得不删除google-json
文件并下载一个新文件,然后 清理项目。
推荐阅读
- node.js - results.map 不是函数
- symfony - Symfony 5 中使用 LDAP 和 DB 的多重身份验证
- python - Miniconda virtualenvs 激活“源激活”与“conda 激活”
- tsql - 无法绑定多部分标识符 - SQL Server 2016
- python - 将 Python 程序的交互控制权交给用户
- sql-server - 在 SQL Server 中查找以 hh:mm:ss 为单位的持续时间
- tensorflow - tf.constant() 中 2 和 2. 的区别 - Tensorflow 中数据类型的动态分配
- react-native - 华为 React Native Map Kit Markers 未使用底部选项卡呈现
- arrays - 如何将数组转换为 CSML 中的组件?
- excel - 将 PDF 文件附加到 Outlook 电子邮件