Как узнать, когда закончится мульти SnapshotListener? - PullRequest
0 голосов
/ 17 октября 2019

Как узнать, где было выполнено множество SnapshotListener различных коллекций?

Возьмите пример попытки извлечь пользователя из коллекции пользователей, команду из коллекции команд и тренера. из коллекции тренеров.

Я хочу сделать упражнение "активным" только тогда, когда получу все данные, которые я ищу.

Например:

  firebaseFirestore.collectionGroup("users").whereEqualTo("user_id", currentUser.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the user
                    }

  firebaseFirestore.collectionGroup("teams").whereEqualTo("team_id", currentTeam.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the team
                    }


  firebaseFirestore.collectionGroup("coachs").whereEqualTo("coach_id", currentCoach.getId()).addSnapshotListener(this, new EventListener<QuerySnapshot>() {
                @Override
                public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                   // getting the coach
                    }

Как мне убедиться, что только после того, как я получу все три, я сделаю свою деятельность "разрешенной"?

1 Ответ

1 голос
/ 17 октября 2019

Вы не можете знать, когда получение данных из базы данных с использованием addSnapshotListener() завершено, поскольку Cloud Firestore является базой данных в реальном времени, и получение данных может никогда не завершиться. Вот почему она называется базой данных реального времени, потому что в любой момент ее можно изменить, добавить или удалить элементы.

Единственный способ частично узнать, есть ли у вас все данные из определенного запроса, - это выполнитьget() позвоните по этому запросу. Даже в этом случае данные могут измениться после вызова этого прослушивателя, поэтому все, что у вас есть, - это snapshot в определенный момент времени.

В вашем конкретном случае вы можете использовать get() в случаекаждый запрос и сохранить его в объекте задачи. Чтобы узнать, когда все задачи выполнены, используйте мой ответ из следующего поста:

Но вместоиспользуя два запроса, вы должны использовать три.

Вы можете использовать CompletionListener только тогда, когда вы записываете или обновляете данные в своей базе данных, и вы будете уведомленыкогда операция была подтверждена серверами Firebase, но вы не можете использовать этот интерфейс при чтении данных.

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