4 votes

Obtenir une ArrayList de Firestore et le nom du document

Je suis nouveau sur Google Firebase et j'essaie d'apprendre quelque chose à son sujet. Je fais une application Android où vous pouvez créer un groupe de personnes et définir le titre du groupe. Ensuite, dans la "page du groupe", vous pouvez voir tous vos groupes dans une liste. La structure de mon db firestore est quelque chose comme ceci :

utilisateurs --> email(document) ---> Groupe(collection) --> Nom de groupe(Document) et le document de nom de groupe contient le arrayList de partecipants (partecipant 0 : nom1, partecipant1 : nom2 etc).

Je voudrais récupérer l'id du document (qui est le titre du groupe) et le tableau des participants, mais je ne sais pas comment utiliser le for each dans le code...

Voici mon code :

public void load_list_view(){

    String email = getEmail();
    final DocumentReference docRef = db.collection("users").document(email).collection("Group").document();

    docRef.get()
            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {

                        titleArray.add(documentSnapshot.getId());
                        titleString = documentSnapshot.getId();

                        partecipantsArray.add(documentSnapshot.getString("partecipant"));
                        num_partecipants =  partecipantsArray.size();
                        numArray.add(num_partecipants);
                        trash = R.drawable.trash_icon;
                        firstChar = Character.toString(titleString.charAt(0));
                        firstCharArray.add(firstChar);
                        customAdapter = new GroupAdapter(GroupActivity.this, firstCharArray, titleArray, numArray, trash);
                        listView.setAdapter(customAdapter);

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(GroupActivity.this, e.getStackTrace().toString(), Toast.LENGTH_LONG).show();

                }
            });

}

avec titleArray.add(documentSnapshot.getId()); il récupère un ID aléatoire et je ne comprends pas pourquoi.

Je n'ai pas trouvé assez de documentation sur Internet concernant Arraylist et firestore.

4voto

Dipayan Ray Points 427

Tout d'abord pour obtenir tous les documents d'une collection, vous devez écrire votre code différemment, comme indiqué dans l'exemple ci-dessous. cette documentation .

db.collection("cities")
    .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());
            }
        }
    });

Ensuite, si vous récupérez une ArrayList, vous devez utiliser (ArrayList<String>) documentSnapshot.get("key") au lieu de documentSnapshot.getString("key") .


Troisièmement, vous obtenez un identifiant aléatoire car avec cette ligne de code (mentionnée ci-dessous), Firebase génère une nouvelle référence de document avec un identifiant aléatoire. Lien de référence .

    final DocumentReference docRef = db.collection("users").document(email).collection("Group").document();

Pour votre aide, j'ai modifié votre code et vous pouvez essayer ce code et vérifier s'il fonctionne ou pas.

public void load_list_view() {

        String email = getEmail();
        final DocumentReference docRef = firestore.collection("users").document(email);

        docRef.collection("Group")
                .get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                        for (QueryDocumentSnapshot document : queryDocumentSnapshots) {

                            //Extracting Group name from each document

                            titleString = document.getId();
                            titleArray.add(titleString);

                            //Extracting participants ArrayList from each document

                            partecipantsArray.add((ArrayList<String>) document.get("participant"));
                            numArray.add(num_partecipants);
                            firstChar = Character.toString(titleString.charAt(0));
                            firstCharArray.add(firstChar);

                        }

                        num_partecipants = partecipantsArray.size();
                        numArray.add(num_partecipants);
                        trash = R.drawable.trash_icon;
                        firstChar = Character.toString(titleString.charAt(0));
                        firstCharArray.add(firstChar);
                        customAdapter = new GroupAdapter(GroupActivity.this, firstCharArray, titleArray, numArray, trash);
                        listView.setAdapter(customAdapter);

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        //HANDLE EXCEPTION
                    }
                });
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X