Прослушайте изменения метаданных в базе данных Firebase Firestore - PullRequest
0 голосов
/ 18 января 2019

Я создаю модуль чата, используя базу данных 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 Ответ

0 голосов
/ 18 января 2019

При передаче MetadataChanges в запрос addSnapshotListener (MetadataChanges metadataChanges, слушатель EventListener) метод:

Указывает, должны ли изменения только метаданных (т. Е. Изменяться только Query.getMetadata ()) вызывать события моментального снимка.

Это означает, что при каждом изменении метаданных слушатель срабатывает. Таким образом, в случае ожидающих операций значение переменной pending будет изменено.

Я хочу знать, как я могу прослушать объект msg, который находится в локальном кэше

В этом случае вам следует рассмотреть возможность использования метода SnapshotMetadata isFromCache () :

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

Когда я в сети, он печатает:

isFromCache: false

Когда я не в сети, он печатает:

isFromCache: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...