首页 > 解决方案 > valueEventListener onDataChanged 在更新子项后返回先前的值

问题描述

我正在开发一个应用程序,该应用程序在FirebaseDatabse创建活动后更新某些数据()的值,即打开聊天屏幕会更新数据库值isSeento 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即使在数据库中为真,仍然是假的

标签: androidfirebasefirebase-realtime-database

解决方案


原来,我不得不删除google-json文件并下载一个新文件,然后 清理项目


推荐阅读