How to get list of documents from a collection in Firestore Android

To have a list that contains all the name of your documents within the root_collection, please use the following code:

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

The result in your logcat will be:

[doc1, doc2, doc3]

Remember, this code will work, only if you'll have some properties within those documents, otherwise you'll end ut with an empty list.


You can call collection method to get documentin the root_collections then hold documents ID which will be used to get document's collection later.

create root collection object as:

    data class RootCollection(
        @DocumentId val id: String,
        val sampleField: String?
    ) {
       // empty constructor to allow deserialization
       constructor(): this(null, null)
    }

Then get the collection using FirebaseFirestore method collection as follows:

    val querySnapshot = firestore.collection("root_collection")
                .get()
                .await()
    if(!querySnapshot.isEmpty) {
             Result.SUCCESS(querySnapshot.toObjects(RootCollection::class.java))
     } else {
         Result.ERROR(Exception("No data available"))
    }

Then to get collection in the document call

    firestore.collection("root_collection/$documentId/collection") 

Note that I have use kotlin coroutines await method as describe in this link

The Result class am using to save state of returned data and handle errors.

   sealed class Result<out T: Any> {
      data class SUCCESS<out T: Any>(val data: T) : Result<T>()
      data class ERROR(val e: Exception): Result<Nothing>()
      object LOADING : Result<Nothing>()
   }