为了账号安全,请及时绑定邮箱和手机立即绑定

侦听 Firebase Firestore 数据库中的元数据更改

侦听 Firebase Firestore 数据库中的元数据更改

缥缈止盈 2022-05-12 18:21:51
我正在使用 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 对象或其元数据处于挂起状态且尚未发送到服务器?
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

MetadataChanges传递给 Query 的addSnapshotListener(MetadataChanges metadataChanges, EventListener listener)方法时:

指示仅元数据更改(即仅 Query.getMetadata() 更改)是否应触发快照事件。

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

我想知道如何监听本地缓存中的 msg 对象

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

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

当我在线时,它会打印:

isFromCache: false

当我离线时,它会打印:

isFromCache: true


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信