Дождитесь завершения запросов Firestore - PullRequest
0 голосов
/ 01 июня 2019

В настоящее время я пытаюсь выполнить несколько запросов в firestore и хочу дождаться их завершения, прежде чем выполнять следующий код. Я прочитал о нескольких возможных направлениях, но мне еще предстоит найти хороший пример для Android.

public HashMap<String,Boolean> multipleQueries(String collection, String field, final ArrayList<String> criteria) {

HashMap<String,Boolean> resultMap = new HashMap<>();

for (int i = 0; i < criteria.size(); i++){
    final int index = i;
    db.collection(collection).whereEqualTo(field,criteria.get(i)).limit(1)
    .get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
    if(task.isSuccessful()) {
         if(task.getResult().size() != 0 ){
           resultMap.put(criteria.get(index),true);
         } else {
             resultMap.put(criteria.get(index),false);
          }
    } else {
        resultMap.put(criteria.get(index),false);

    }

    }

     });
   }
   return resultMap;

}

1 Ответ

1 голос
/ 01 июня 2019

Поскольку get() возвращает Task, вы можете использовать Tasks.whenAll(...).

Но вы не сможете вернуть List из этой функции, поскольку все данные загружаются асинхронно. Лучшее, что вы можете сделать, это вернуть результат из Task.whenAll(...), который сам по себе является Task. Посмотрите замечательную статью Дуга Стивенсона о том, как стать мастером задачи: https://firebase.googleblog.com/2016/10/become-a-firebase-taskmaster-part-4.html

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