web-dev-qa-db-fra.com

Comment obtenir la liste des documents d'une collection dans Firestore Android

Ma structure de base de données Firestore:

|
|=>root_collection
                  |
                  |=>doc1
                         |                  
                         |=>collection
                  |
                  |=>doc2
                         |                  
                         |=>collection
                  |
                  |=>doc3
                         |                  
                         |=>collection

Maintenant, je veux obtenir la liste des documents de root_collection. Il y aurait une liste avec les données suivantes {"doc1", "doc2", "doc3"}. J'en ai besoin parce que je veux faire un spinner et mettre ces données dans le spinner. Ensuite, un utilisateur choisirait un document et le téléchargerait.

J'essaie d'utiliser le code ci-dessous:

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

Mais le code fonctionne seulement alors j'ai une structure de données sans collections dans les documents. Dans les autres cas, il n'y a aucun document dans QueryDocumentSnapshot.

Merci!

5
Ivan Banha

Pour avoir une liste qui contient tout le nom de vos documents dans le root_collection, veuillez utiliser le code suivant:

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

Le résultat dans votre logcat sera:

[doc1, doc2, doc3]

N'oubliez pas que ce code ne fonctionnera que si vous aurez des propriétés dans ces documents, sinon vous finirez avec une liste vide.

8
Alex Mamo