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

我正在使用 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 对象或其元数据处于挂起状态且尚未发送到服务器?


缥缈止盈
浏览 91回答 1
1回答

千巷猫影

将MetadataChanges传递给 Query 的addSnapshotListener(MetadataChanges metadataChanges, EventListener listener)方法时:指示仅元数据更改(即仅 Query.getMetadata() 更改)是否应触发快照事件。这基本上意味着每次元数据更改时,都会触发侦听器。因此,在挂起操作的情况下,变量的值pending将被更改。我想知道如何监听本地缓存中的 msg 对象在这种情况下,您应该考虑使用 SnapshotMetadata 的isFromCache()方法:Log.d(TAG,&nbsp;"isFromCache:&nbsp;"&nbsp;+&nbsp;documentSnapshot.getMetadata().isFromCache());当我在线时,它会打印:isFromCache:&nbsp;false当我离线时,它会打印:isFromCache:&nbsp;true
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java