【问题标题】:Check how many messages have been sent检查已发送多少条消息
【发布时间】:2022-03-13 15:56:54
【问题描述】:

我正在制作一个信使应用程序,我正在使用 firebase 作为我的数据库,并且我正在使用 MVVM 模式。

我想检查用户是否有新的未读消息,并显示发送者附近的消息数。

所以在 MainActivity 中有一个 RecyclerView 填充了用户。 这是用户模型(https://ibb.co/w72K17m)。

我有一个“seen”键,这意味着用户还没有阅读消息,此外,我还有一个包含当前用户 UID 的“reciever”。使用这些值,我尝试执行以下操作:

chatRef.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {

        val messageArray = ArrayList<String?>()
        val usersArray = ArrayList<String?>()

        for (snapshot2 in snapshot.children) {

            val chat = snapshot2.getValue(Message::class.java) // Getting all the messages with values, like the photo.

            if (chat!!.receiver.equals(currentUser.value!!.uid)) { // Check if the current user is the reciever
                if (chat.seen == false){ // Check if the message is seen

                    messageArray.add(chat.message)
                    usersArray.add(chat.sender)
                }
            }
        }

        Log.e("Chat","messageArray: $messageArray")
        Log.e("Chat","usersArray: $usersArray")
    }

    override fun onCancelled(error: DatabaseError) {
        TODO("Not yet implemented")
    }
})

这是输出:

messageArray: [message1, message2 , message3, message4, message5 , message6]

usersArray: [4RDojKDSJZUOfpNky9MxuLHQJN63, 4RDojKDSJZUOfpNky9MxuLHQJN63, iromTJzrZCQVJnjcLhhdUjXi5bP2, iromTJzrZCQVJnjcLhhdUjXi5bP2, iromTJzrZCQVJnjcLhhdUjXi5bP2, iromTJzrZCQVJnjcLhhdUjXi5bP2]

我收到了所有的消息和发送给我的所有用户,但我不知道如何查看每个 ID 发送了多少条消息。

我尝试使用 hashMap 但没有成功..

【问题讨论】:

  • 您是否将 UID 存储在 Message 对象中?
  • @AlexMamo 是的,两个用户的 UID
  • 那为什么不简单地检查消息中的 UID 呢?通过这种方式,您将始终知道有多少消息属于特定用户。

标签: android kotlin for-loop firebase-realtime-database arraylist


【解决方案1】:

毕竟我用过HashMap,我就是这样做的:

fun searchNumberOfMessages(user: User){

    val hasMap = HashMap<String, Any?>()
    
    hasMap.clear()
    hashMapArray.clear()

    if (newMessages.value != null){
        (newMessages.value as ArrayList<HashMap<String, Any?>>).clear()
    }

    chatRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {

            val messageArray = ArrayList<String?>()

            for (snapshot2 in snapshot.children) {

                val chat = snapshot2.getValue(Message::class.java)

                if (chat!!.receiver.equals(currentUser!!.uid) && chat.sender.equals(
                        user.uid)) {

                    if (chat.seen == false){

                        messageArray.add(chat.message)

                    }

                }

            }

            hasMap["Sender"] = user
            hasMap["Messages"] = messageArray.size
            hashMapArray.add(hasMap)
            newMessages.value = hashMapArray

        }

        override fun onCancelled(error: DatabaseError) {
            TODO("Not yet implemented")
        }
    })

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多