Arraylist即使在向其传递数据时也保持为null



我正在开发一个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属性尚未创建,因此为null。

只要用下一行替换它,它就会工作:

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

或者你可以写:

val chatMessagesList = ArrayList<MessageModel>()

因为您在sendMessage()函数中创建了一个AllChatsModel类的新对象,所以chatModel?.chatMessages在初始化之前始终为null。

最新更新