【发布时间】:2023-03-16 19:45:01
【问题描述】:
我正在尝试实时阅读消息,问题是当人 A 向人 B 发送消息时,人 B 实时侦听器调用了一个已添加的事件,这完全是我明白的,但为什么删除事件也叫什么?
fun readMessagesRealTimeListener(documentID: String, date: Date, senderUser: ChatUser, reciverUser: ChatUser): LiveData<List<ChatMessage>> {
if (mutableChatMessageList == null) {
mutableChatMessageList = MutableLiveData()
val chatMessageList = ArrayList<ChatMessage>()
db = FirebaseFirestore.getInstance()
readMessageListener = db.collection(Constants.CONVERSATION)
.document(documentID)
.collection("0")
.orderBy("data", Query.Direction.DESCENDING)
.limit(5)
.addSnapshotListener(EventListener<QuerySnapshot> { querySnapshot, e ->
if (e != null) {
Log.d(TAG, "error in real time listerner: " + e.code);
}
val source = if (querySnapshot != null && querySnapshot.metadata.hasPendingWrites())
"Local"
else
"Server"
Log.d(TAG, "source of $source")
chatMessageList.clear()
if (!querySnapshot?.isEmpty!!) {
for (changedSnapshot in querySnapshot.documentChanges) {
when (changedSnapshot.type) {
DocumentChange.Type.ADDED -> Log.d(TAG, "New message: " + changedSnapshot.getDocument().getData())
DocumentChange.Type.MODIFIED -> Log.d(TAG, "Modified message: " + changedSnapshot.getDocument().getData())
DocumentChange.Type.REMOVED -> Log.d(TAG, "Removed message: " + changedSnapshot.getDocument().getData())//this log also called when new document added in firestore but why?
}
var chatMessage = changedSnapshot.document.toObject(ChatMessage::class.java)
Log.d(TAG, "message " + chatMessage.message)
chatMessageList.add(chatMessage)
}
mutableChatMessageList?.value = chatMessageList
} else {
Log.d(TAG, "no message found in real time")
mutableChatMessageList?.setValue(null)
}
})
}
return mutableChatMessageList!!
}
【问题讨论】:
标签: android firebase kotlin google-cloud-firestore