簡體   English   中英

偵聽Firebase Firestore數據庫中的元數據更改

[英]Listen For MetaData Changes in Firebase Firestore database

我正在使用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對象?

MetadataChanges傳遞給查詢的addSnapshotListener(MetadataChanges metadataChanges,EventListener偵聽器)方法時:

指示僅純元數據的更改(即僅Query.getMetadata()更改)是否應觸發快照事件。

基本上,這意味着每次元數據更改時,都會觸發偵聽器。 因此,在進行掛起操作的情況下,將更改變量pending的值。

我想知道如何監聽本地緩存中的味精對象

在這種情況下,您應該考慮使用SnapshotMetadata的isFromCache()方法:

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

當我在線時,它會打印:

isFromCache: false

當我離線時,它會打印:

isFromCache: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM