如何从Firestore Android中的集合中获取文档列表

Iva*_*nha 5 java android firebase google-cloud-firestore

我的Firestore数据库结构:

|
|=>root_collection
                  |
                  |=>doc1
                         |                  
                         |=>collection
                  |
                  |=>doc2
                         |                  
                         |=>collection
                  |
                  |=>doc3
                         |                  
                         |=>collection
Run Code Online (Sandbox Code Playgroud)

现在我想从中获取文件清单root_collection。将有一个包含以下数据的列表{"doc1", "doc2", "doc3"}。我需要它是因为我想制作一个微调器并将这些数据放入微调器中。然后,用户将选择一些文档并下载。

我尝试使用下面的代码:

firestore.collection("root_collection")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.d(TAG,document.getId() + " => " + document.getData());
                        }
                    } else {
                        Log.d(TAG, "Error getting documents: ", task.getException());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

但是代码只有在我拥有文档中没有集合的数据结构时才起作用。在其他情况下,中没有任何文档QueryDocumentSnapshot

谢谢!

Ale*_*amo 8

要拥有包含内所有文档名称的列表root_collection,请使用以下代码:

firestore.collection("root_collection").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                list.add(document.getId());
            }
            Log.d(TAG, list.toString());
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

您的logcat中的结果将是:

[doc1, doc2, doc3]
Run Code Online (Sandbox Code Playgroud)

请记住,仅当您在这些文档中具有某些属性时,此代码才有效,否则,您将以空列表结尾ut。