gpt4 book ai didi

java - 根据文档列表查询 FireStore

转载 作者:行者123 更新时间:2023-11-30 10:06:49 25 4
gpt4 key购买 nike

我有一个 List<String>引用我想从 FireStore 检索的文档的名称。我想在加载完成后访问内容,所以我实现了 OnCompleteListenerFragment使用数据的。但是,我不确定如何在 Task 中运行循环为每个文档查询 FireStore。我在返回 Task 的 Repository 类中查询 FireStore对象通过我的ViewModel返回最后到我的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在其中包含一个循环。我需要提取 List<String> 的内容吗?在我的 Fragment并针对每个项目运行单独的查询?

如有任何建议,我们将不胜感激。

最佳答案

根据您的评论:

I have a List of Document names and I need to transform this to essentially a List of Tasks to retrieve the entire document.

要解决这个问题,请使用以下代码行:

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);
}
}
});

关于java - 根据文档列表查询 FireStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com