等待Firestore查询完成

时间:2019-05-31 21:58:15

标签: java android firebase google-cloud-firestore

我目前正在尝试在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 个答案:

答案 0 :(得分:0)

由于get()返回Task,因此您可以使用Tasks.whenAll(...)

但是您将无法从该函数返回List,因为所有数据都是异步加载的。最好的办法是从Task.whenAll(...)返回结果,该结果本身就是Task。请参阅道格·史蒂文森(Doug Stevenson)撰写的出色文章,以期成为任务主管:https://firebase.googleblog.com/2016/10/become-a-firebase-taskmaster-part-4.html