gpt4 book ai didi

java - 监听 Firebase Firestore 数据库中的元数据更改

转载 作者:行者123 更新时间:2023-12-01 19:43:57 25 4
gpt4 key购买 nike

我正在使用 Firestore 数据库创建聊天模块。以下是我的监听器代码,用于监听新消息:

   mDb.collection("Users_Collection").document(mAuth.getUid()).collection("Recipients")
.document(psychichObj.getUid()).collection("Messages").orderBy("time").limit(30)
.addSnapshotListener(MetadataChanges.INCLUDE, new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e==null){
for (DocumentChange dc:queryDocumentSnapshots.getDocumentChanges()){
switch (dc.getType()){
case ADDED:
Log.d("chatevents", "onEvent:Added ");
messgaesDataClass msg = dc.getDocument().toObject(messgaesDataClass.class);
messages.add(msg);
chatAdapter.notifyDataSetChanged();
messagesRecycler.smoothScrollToPosition(messages.size());
break;
case REMOVED:
Log.d("chatevents", "onEvent:Removed ");

case MODIFIED:
Log.d("chatevents", "onEvent:Modiefied ");

}
}
}
}
});

当我发送消息时,我想知道如何监听本地缓存中的 msg 对象或其元数据处于挂起状态且尚未发送到服务器的 msg 对象?

最佳答案

当通过 MetadataChanges 时到查询的addSnapshotListener(MetadataChanges metadataChanges, EventListener listener)方法:

Indicates whether metadata-only changes (i.e. only Query.getMetadata() changed) should trigger snapshot events.

这基本上意味着每次元数据更改时,都会触发监听器。因此,在挂起操作的情况下,变量 pending 的值将会更改。

I want to know how can i listen for a msg object that is in local cache

在这种情况下,您应该考虑使用 SnapshotMetadata 的 isFromCache()方法:

Log.d(TAG, "isFromCache: " + documentSnapshot.getMetadata().isFromCache());

当我在线时,它会打印:

isFromCache: false

当我离线时,它会打印:

isFromCache: true

关于java - 监听 Firebase Firestore 数据库中的元数据更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54253438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com