Как узнать, что прослушиватель снимков завершен | Firestore? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть этот код, который извлекает данные из определенной подгруппы:

 db.collection("groups").document(id.get(i)).collection("members")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                id.add(document.getId());
                                Log.e(Tag, document.getId() + " => " + document.getData());

                                if (task.getResult().isEmpty()) {
                                    Log.d(Tag, "onSuccess: LIST EMPTY");
                                    return;
                                } else {
                                    // Convert the whole Query Snapshot to a list
                                    // of objects directly! No need to fetch each
                                    // document.
                                    Log.e(Tag, task.getResult() + "");
                                    typeAll = task.getResult().toObjects(GroupMembers.class);
                                }
                            }
                        } else {
                            Log.e(Tag, "Error getting documents: ", task.getException());
                        }

Но мне нужно вызвать метод после извлечения всех данных по снимкам. Как этого добиться? что я должен проверить?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вызовите ваш метод для обработки списка объектов после его получения:

                           if (task.isSuccessful()) {
                                for (QueryDocumentSnapshot document : task.getResult()) {
                                    id.add(document.getId());
                                    Log.e(Tag, document.getId() + " => " + document.getData());

                                    if (task.getResult().isEmpty()) {
                                        Log.d(Tag, "onSuccess: LIST EMPTY");
                                        return;
                                    } else {
                                        // Convert the whole Query Snapshot to a list
                                        // of objects directly! No need to fetch each
                                        // document.
                                        Log.e(Tag, task.getResult() + "");
                                        typeAll = task.getResult().toObjects(GroupMembers.class);

                                        // do something with typeall here

                                    }
                                }
                            } else {
                                Log.e(Tag, "Error getting documents: ", task.getException());
                            }
0 голосов
/ 02 мая 2018

Как узнать, что прослушиватель снимков завершен?

Слушатель моментальных снимков всегда прослушивает изменения, если вы не удаляете его .

Если вы хотите знать, когда загрузка данных из базы данных завершена, обратите внимание, что вы не можете знать, когда все members будут загружены, поскольку Cloud Fireatore - это база данных реального времени и получение данных. может никогда не завершиться. Вот почему она называется базой данных реального времени, потому что в любой момент данные в коллекции members могут быть изменены, свойства могут быть добавлены или удалены.

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

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