Как избежать вызова onEvent (снимки QuerySnapshot, ошибка FirestoreException) для сообщения, удаленного с использованием snapshotListener с firestore? - PullRequest
1 голос
/ 09 января 2020

Я использую Firestore в Java по методу:

 firestore.collection("myCollection").addSnapshotListener(listener);

Мой слушатель:

 EventListener<QuerySnapshot> listener = new EventListener<QuerySnapshot>() {
        WriteBatch wb = firestore.batch();
        @Override
        public void onEvent(QuerySnapshot snapshots, FirestoreException error) {
           snapshots.forEach(doc -> {
                // do something with the doc and then delete it
                ...
                wb.delete(doc.getReference()
        }
        wb.commit(); 
}

Проблема в том, что при удалении документов я вызываю снова onEvent метод. Есть способ этого избежать?

1 Ответ

1 голос
/ 09 января 2020

Есть способ избежать этого?

Конечно, есть. Что вы делаете, это добавляете слушателя в реальном времени, который срабатывает каждый раз, когда вы вносите изменения в ваше myCollection местоположение. Не имеет значения, если это операция удаления, записи или даже обновления, метод onEvent() срабатывает. Чтобы избежать этого, вы должны получать данные только один раз, используя метод Query get () . Это соответствующий addListenerForSingleValueEvent() метод из базы данных Firebase Realtime.

Редактировать:

Согласно вашему комментарию:

Существует способ использовать слушатель и запускать onEvent только с операциями создания (или создания и обновления)?

Да, вы можете просматривать изменения между снимками с помощью оператора switch, как объяснено официальная документация, касающаяся изменений между снимками .

Часто полезно увидеть фактические изменения результатов запроса между снимками запросов, а не просто использовать весь снимок запроса. Например, вы можете захотеть сохранить кеш, так как отдельные документы добавляются, удаляются и изменяются.

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