Сообщения чата не сортируются должным образом с базой данных реального времени - PullRequest
0 голосов
/ 01 августа 2020

Я следую этой серии руководств руководству по чату , и я сделал приложение для чата с базой данных firebase в реальном времени. Первое изображение показывает, как выглядят сообщения чата до прокрутки сообщений recyclerView, а второе изображение показывает, как последовательность сообщений руины и изображения извлекают многие после прокрутки. а структура базы данных здесь

изображений

в этой структуре узел ChatList имеет uid текущего пользователя в качестве дочернего, а его дочерние элементы - это идентификатор пользователя, с которым у него был чат, поэтому это можно рассматривать как комнату чата. а узел чатов имеет дочерний элемент в качестве идентификатора сообщения, и все сообщения приложения находятся здесь. возможно, проблема с recyclerView в chatActivity, но я не смог ее получить.

private lateinit var recyclerViewChat: RecyclerView

recyclerViewChat = findViewById(R.id.recyclerView_chat_activity)
        recyclerViewChat.setHasFixedSize(true)
        val linearLayoutManager = LinearLayoutManager(applicationContext)
        linearLayoutManager.stackFromEnd = true
        recyclerViewChat.layoutManager = linearLayoutManager


private fun retrieveMessages(senderID: String, receiverId: String) {
        mChatList = ArrayList()
        val messageRef = dbRef.child("Chats")
        messageRef.keepSynced(true)

        messageRef.addValueEventListener(object : ValueEventListener{
            override fun onDataChange(p0: DataSnapshot) {
                (mChatList as ArrayList<Chat>).clear()
                for (snapshot in p0.children){
                    val chat = snapshot.getValue(Chat::class.java)
                    if(chat!!.getReceiver() == senderID && chat.getSender() == receiverId ||
                            chat.getReceiver() == receiverId && chat.getSender() == senderID){
                        (mChatList as ArrayList<Chat>).add(chat)
                    }
                    chatsAdapter = ChatsAdapter(this@ChatActivity, (mChatList as ArrayList<Chat>))
                    recyclerViewChat.adapter = chatsAdapter
                }
            }

        })

    }
...