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