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

后端 未结 2 606
滥情空心
滥情空心 2021-01-17 18:12

My structure of Firestore database:

|
|=>root_collection
                  |
                  |=>doc1
                         |                  
            


        
相关标签:
2条回答
  • 2021-01-17 18:34

    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>()
       }
    
    0 讨论(0)
  • 2021-01-17 18:35

    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.

    0 讨论(0)
提交回复
热议问题