我有一个List<String>
引用我想要从 FireStore 检索的文档的名称。我想在内容加载完成后访问它们,所以我实现了一个OnCompleteListener
in the Fragment
使用该数据。但是,我不确定如何在Task
查询 FireStore 的每个文档。我正在 Repository 类中查询 FireStore,该类返回Task
通过我的对象返回ViewModel
最后到我的Fragment
。我希望存储库返回一个Task
这样我就可以附上OnCompleteListener
以便知道我何时完成数据加载。
我的存储库Query
method:
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
其中包含一个循环。我需要提取的内容吗List<String>
in my Fragment
并对每个项目运行单独的查询?
任何建议将不胜感激。
根据您的评论:
我有一个文档名称列表,我需要将其转换为一个任务列表以检索整个文档。
要解决此问题,请使用以下代码行:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference collRef = rootRef.collection("yourCollection");
List<String> myGroupTags = new ArrayList<>();
List<DocumentReference> listDocRef = new ArrayList<>();
for(String s : myGroupTags) {
DocumentReference docRef = collRef.document(s);
listDocRef.add(docRef);
}
List<Task<DocumentSnapshot>> tasks = new ArrayList<>();
for (DocumentReference documentReference : listDocRef) {
Task<DocumentSnapshot> documentSnapshotTask = documentReference.get();
tasks.add(documentSnapshotTask);
}
Tasks.whenAllSuccess(tasks).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
for (Object object : list) {
GroupBase gb = ((DocumentSnapshot) object).toObject(GroupBase.class);
Log.d("TAG", tp.getPropertyname);
}
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)