Firebase 聊天应用程序的问题

Firebase 聊天应用程序的问题,firebase,kotlin,chat,Firebase,Kotlin,Chat,因此,我构建了一个聊天应用程序。在名为“MessageChatActivity”的活动中,用户可以发送和接收消息。发送消息后,会有一个“sent”标记,读取消息后,它会变为“seen” 但是我遇到了这个问题-如果用户A向用户B发送消息,用户B进入聊天活动,则标记变为“已看到”。然而,在此之后,用户A发送给B的每条消息都会自动获得“seen”标记,即使用户B不在聊天室中。只要用户B在线,消息就会变为“已看到”。只有当应用程序中完全存在用户B时,新消息才会标记为“已发送” 我想不出问题出在哪里。以下

因此,我构建了一个聊天应用程序。在名为“MessageChatActivity”的活动中,用户可以发送和接收消息。发送消息后,会有一个“sent”标记,读取消息后,它会变为“seen”

但是我遇到了这个问题-如果用户A向用户B发送消息,用户B进入聊天活动,则标记变为“已看到”。然而,在此之后,用户A发送给B的每条消息都会自动获得“seen”标记,即使用户B不在聊天室中。只要用户B在线,消息就会变为“已看到”。只有当应用程序中完全存在用户B时,新消息才会标记为“已发送”

我想不出问题出在哪里。以下是相关代码:

MessageChatActivity:

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)
            {

            }
        })
    }
override-fun-onCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u message\u chat)
//这里有检索和发送对话的代码,最后调用seenMessage函数。
请参阅消息(userIdVisit)
var seenListener:ValueEventListener?=null
请参阅消息(userIdVisit)
{
私人娱乐seenMessage(userId:String)
{
val reference=FirebaseDatabase.getInstance().reference.child(“聊天”)
seenListener=reference!!.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot)
{
对于(p0.儿童中的数据快照)
{
val chat=dataSnapshot.getValue(chat::class.java)
如果(chat!!.getReceiver().equals(firebaseUser!!.uid)&&chat!!.getSender().equals(userId))
{
val hashMap=hashMap()
hashMap[“isseen”]=true
dataSnapshot.ref.updateChildren(hashMap)
}
}
}
已取消覆盖乐趣(p0:DatabaseError)
{
}
})
}
这是ChatsAdapter中的相关代码:

This is the ChatsAdapter:
class ChatsAdapter (mContext: Context, mChatList: List<Chat>, imageUrl: String)
    : RecyclerView.Adapter<ChatsAdapter.ViewHolder>()

{
    private val mContext: Context
    private val mChatList: List<Chat>
    private val imageUrl: String
    var firebaseUser: FirebaseUser = FirebaseAuth.getInstance().currentUser!!

    init {
        this.mChatList = mChatList
        this.mContext = mContext
        this.imageUrl = imageUrl
    }

    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
    {
        var profile_image: CircleImageView? = null
        var show_text_message: TextView? = null
        var left_image_view: ImageView? = null
        var text_seen: TextView? = null
        var right_image_view: ImageView? = null

        init {
            profile_image = itemView.findViewById(R.id.profile_image)
            show_text_message = itemView.findViewById(R.id.show_text_message)
            left_image_view = itemView.findViewById(R.id.left_image_view)
            text_seen = itemView.findViewById(R.id.text_seen)
            right_image_view = itemView.findViewById(R.id.right_image_view)
        }

    }

// Inside the ChatsAdapter there is a function that involves the seen tag:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val chat: Chat = mChatList[position]
        if (position == mChatList.size-1)
        {
            if (chat.getIsseen()!!)
            {
                holder.text_seen!!.text = "Seen"
                if (chat.getMessage().equals("sent you an image.") && !chat.getUrl().equals(""))
                {
                    val lp: RelativeLayout.LayoutParams? = holder.text_seen!!.layoutParams as RelativeLayout.LayoutParams?
                    lp!!.setMargins(0, 245, 10, 0)
                    holder.text_seen!!.layoutParams = lp
                }
            }
            else
            {
                holder.text_seen!!.text = "Sent"
                if (chat.getMessage().equals("sent you an image.") && !chat.getUrl().equals(""))
                {
                    val lp: RelativeLayout.LayoutParams? = holder.text_seen!!.layoutParams as RelativeLayout.LayoutParams?
                    lp!!.setMargins(0, 245, 10, 0)
                    holder.text_seen!!.layoutParams = lp
                }
            }
        }
        else
        {
            holder.text_seen!!.visibility = View.GONE
        }
    }
这是聊天室适配器:
类chatsdapter(mContext:Context,mChatList:List,imageUrl:String)
:RecyclerView.Adapter()
{
private val mContext:上下文
private val mChatList:List
私有val-imageUrl:String
var firebaseUser:firebaseUser=FirebaseAuth.getInstance().currentUser!!
初始化{
this.mChatList=mChatList
this.mContext=mContext
this.imageUrl=imageUrl
}
内部类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView)
{
var profile_image:CircleImageView?=null
var show_text_message:TextView?=null
var left_image_view:ImageView?=null
变量text_seen:TextView?=null
var right\u image\u view:ImageView?=null
初始化{
profile\u image=itemView.findviewbyd(R.id.profile\u image)
show_text_message=itemView.findviewbyd(R.id.show_text_message)
left\u image\u view=itemView.findViewById(R.id.left\u image\u view)
text\u seen=itemView.findviewbyd(R.id.text\u seen)
right\u image\u view=itemView.findViewById(R.id.right\u image\u view)
}
}
//ChatsAdapter中有一个函数涉及SEED标记:
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
val chat:chat=mChatList[位置]
if(位置==mChatList.size-1)
{
if(chat.getIsseen()!!)
{
holder.text\u seen!!.text=“seen”
if(chat.getMessage().equals(“向您发送了一个图像”)&&&!chat.getUrl().equals(“”)
{
val lp:RelativeLayout.LayoutParams?=holder.text_seen!!.LayoutParams是否为RelativeLayout.LayoutParams?
lp!!.setMargins(0,245,10,0)
holder.text\u seen!!.layoutParams=lp
}
}
其他的
{
holder.text\u seen!!.text=“已发送”
if(chat.getMessage().equals(“向您发送了一个图像”)&&&!chat.getUrl().equals(“”)
{
val lp:RelativeLayout.LayoutParams?=holder.text_seen!!.LayoutParams是否为RelativeLayout.LayoutParams?
lp!!.setMargins(0,245,10,0)
holder.text\u seen!!.layoutParams=lp
}
}
}
其他的
{
holder.text\u seen!!.visibility=View.GONE
}
}

有人有想法吗?