【发布时间】:2019-02-01 15:48:54
【问题描述】:
我有一个List<String> 的名称指的是我想从 FireStore 中检索的文档。我想在加载完成后访问内容,所以我在 Fragment 中实现了一个使用数据的 OnCompleteListener。但是,我不确定如何在 Task 中运行循环来查询每个文档的 FireStore。我在 Repository 类中查询 FireStore,该类通过我的ViewModel 返回一个Task 对象,最后返回我的Fragment。我希望存储库返回 Task,以便我可以将 OnCompleteListener 附加到它,以便知道我何时完成加载数据。
我的仓库Query 方法:
public Task<List<GroupBase>> getGroups(List<String> myGroupTags){
final List<GroupBase> myGroups = new ArrayList<>();
for(String groupTag : myGroupTags){
groupCollection.document(groupTag).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
myGroups.add(task.getResult().toObject(GroupBase.class));
}
}
});
}
return null; //Ignore this for now.
}
我知道这不会返回我需要的内容,但我不确定如何构造一个在其中包含循环的 Task。我是否需要在我的Fragment 中提取List<String> 的内容并对每个项目运行单独的查询?
任何建议将不胜感激。
【问题讨论】:
-
那么你真正需要什么,将字符串列表转换为任务列表?
-
如果你收集一堆 Task 对象并等待它们全部完成 Tasks.whenAll() 得到一个包含所有结果的单个 Task 会更容易。
-
@AlexMamo 基本上是的。我有一个文档名称列表,我需要将其转换为本质上的任务列表以检索整个文档。嗨,Doug,所以您建议我遍历列表并为每个项目构建一个任务并将单个任务附加到一个新列表中?
标签: java android firebase google-cloud-firestore task