即使将数据传递给 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()
函数中创建了一个AllChatsModel
class的新对象,这就是为什么chatModel?.chatMessages
在初始化之前一直为空
我正在开发一个 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()
函数中创建了一个AllChatsModel
class的新对象,这就是为什么chatModel?.chatMessages
在初始化之前一直为空