我正在開發一個 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
uj5u.com熱心網友回復:
我猜你val chatMessagesList在sendMessage()函式中定義變數的方式有錯誤。嘗試將其修復為:
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>()
因為您AllChatsModel在sendMessage()函式中創建了一個新的類物件,這就是為什么chatModel?.chatMessages在初始化之前始終為 null的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408074.html
標籤:
上一篇:根據JetpackCompose中的drawerState更改BottomDrawer的gesturesEnabled?
