即使将数据传递给 Arraylist,Arraylist 仍然为 null

Arraylist remains null even when data is being passed to it

我正在开发一个 firebase 聊天应用程序。我想保持两个不同用户之间的聊天,为此我创建了一个父节点 +923478302658@Chat 并在其中创建了一个子节点 +923478302658-+ 923065015216 给两位参与者的消息。

这是我的聊天模型:

class AllChatsModel {
    var chatID: String? = null
    var chatStarterName: String? = null
    var chatRecieverName: String? = null
    var chatStartTD: String? = null
    var chatLastMessage: String? = null
    var chatLastMsgTime: String? = null
    var chatHeadActive: Boolean? = null
    var chatMessages: ArrayList<MessageModel>? = null
}

这里是发送消息的函数:

private fun sendMessage(message: String) {
    val dateFormat = SimpleDateFormat("dd MMMM, yyyy 'at' HH:mm aaa")
    val calendar = Calendar.getInstance()
    val currentTime: String = dateFormat.format(calendar.time)

    val chatID = databaseReference!!.push().key
    val chatModel = AllChatsModel()
    chatModel.chatStarterName = (sharedPreference?.userName)
    chatModel.chatRecieverName = signUpEntity?.userUID
    chatModel.chatStartTD = currentTime
    chatModel.chatLastMessage = message
    chatModel.chatLastMsgTime = currentTime

    val chatMessagesList: ArrayList<MessageModel>? = chatModel?.chatMessages // debugs gives null here
    val messageID = databaseReference!!.push().key
    val messageModel = MessageModel()
    messageModel.messageID = messageID
    messageModel.messageText = message
    messageModel.messageTime = currentTime
    messageModel.msgSenderID = FirebaseAuth.getInstance().uid
    messageModel.msgSenderName = (sharedPreference?.userName)
    messageModel.msgSenderNo = (currentUserNo)
    messageModel.msgReceiverID = signUpEntity?.userUID
    messageModel.msgReceiverName = signUpEntity?.userName
    messageModel.msgReceiverNo = signUpEntity?.userPhone

    chatMessagesList?.add(messageModel) // here chatMessagesList is null
    chatModel.chatMessages = chatMessagesList

    FirebaseDatabase.getInstance().reference.child("${currentUserNo}@Chat")
        .child("${currentUserNo}-${signUpEntity?.userPhone}")
        .child("ChatMessages").setValue(chatModel)

    txtInputMsg.setText("")
}

我想获取这样的 firebase 节点结构,但应用程序崩溃了。为什么我没有得到附图中那样的数据。 [1]: https://i.stack.imgur.com/QOW8c.png

我想您在 sendMessage() 函数中定义 val chatMessagesList 变量的方式有误。尝试将其修复为:

val chatMessagesList: ArrayList<MessageModel> = chatModel?.chatMessages ?: ArrayList<MessageModel>()

使用 Elvis 运算符 ?: 我们保证 chatMessagesList 变量不会为空。

当您编写这段代码时:

val chatMessagesList: ArrayList<MessageModel>? = chatModel?.chatMessages // debugs gives null here

chatModel?.chatMessages 属性 尚未创建,因此为空。

只需将其替换为下一行即可:

val chatMessagesList: ArrayList<MessageModel> = chatModel?.chatMessages ?: ArrayList<MessageModel>()

或者你可以只写:

val chatMessagesList = ArrayList<MessageModel>()

因为你在sendMessage()函数中创建了一个AllChatsModelclass的新对象,这就是为什么chatModel?.chatMessages在初始化之前一直为空