簡體   English   中英

根據文檔列表查詢 FireStore

[英]Query FireStore against a List of Documents

我有一個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>的內容並為每個項目運行單獨的查詢?

任何建議將不勝感激。

根據您的評論:

我有一個文檔名稱列表,我需要將其轉換為本質上的任務列表以檢索整個文檔。

要解決此問題,請使用以下代碼行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM