Задача Firestore с для каждого цикла - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь получить ссылки на документы из Firestore в цикле for (без итерации по подмножеству).Мне нужно дождаться окончания цикла, дождаться получения данных и, в случае успеха, отправить эти данные в Firestore.В настоящее время мой метод не ожидает получения данных, поскольку он асинхронный.

Вероятно, было бы неплохо создать метод, который возвращает задачу, а затем ожидать результата.Предложения?

ArrayList<String> documentPath = new ArrayList<>();
     private void getDocumentRef() {
        try {
            for (String path : documentPath) {
                db.document(path).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {

                        if (task.isSuccessful() && task.getResult() != null) {
                            if (task.getResult().exists()) {
                                references.add(task.getResult().getReference());                      
                            }
                        }
                    }
                });
            }
        } catch (Exception e) {

        } 
    }

1 Ответ

0 голосов
/ 26 сентября 2019

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

Создайте переменную-член для отслеживания запросов и в пределахваш OnCompleteListener:

@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {

    mCompleted++; // Update your member variable

    if(task.isSuccessful(){
        // Do something with your returned data
    }else{
        // The task failed
    }

    // Check if the last query has completed
    if(mCompleted == numOfQueries){
        mCompleted = 0; // Reset the completed queries if you might run this process again

        // All of your queries have returned and you can now do something with the complete data set
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...