因此,我构建了一个聊天应用程序。在名为“ MessageChatActivity”的活动中,用户可以发送和接收消息。发送邮件后,有一个“已发送”标签,阅读邮件后,它变为“已看到”。
但是我遇到了这个问题-如果用户A向用户B发送一条消息,并且用户B进入了聊天活动,则标签将更改为“已看到”。但是,此后,即使用户B不在聊天中,用户A发送给B的每条消息也会自动获得“ seen”标签。只要用户B处于联机状态,该消息就会更改为“已看到”。仅当用户B完全存在于应用程序中时,新消息才被标记为“已发送”。
我不知道问题出在哪里。这是相关的代码:
MessageChatActivity:
e.output
这是ChatsAdapter中的相关代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_message_chat)
//Here there is code to retrieve and send conversations, at the end calling the seenMessage function.
seenMessage(userIdVisit)
var seenListener: ValueEventListener? = null
seenMessage(userIdVisit)
{
private fun seenMessage(userId: String)
{
val reference = FirebaseDatabase.getInstance().reference.child("Chats")
seenListener = reference!!.addValueEventListener(object: ValueEventListener{
override fun onDataChange(p0: DataSnapshot)
{
for (dataSnapshot in p0.children)
{
val chat = dataSnapshot.getValue(Chat::class.java)
if (chat!!.getReceiver().equals(firebaseUser!!.uid) && chat!!.getSender().equals(userId))
{
val hashMap = HashMap<String, Any>()
hashMap["isseen"] = true
dataSnapshot.ref.updateChildren(hashMap)
}
}
}
override fun onCancelled(p0: DatabaseError)
{
}
})
}