2 votes

pratique correcte pour l'interrogation des groupes Firebase

J'essaie de comprendre les groupes dans la base de données Firebase. J'ai donc créé un index simple appelé genres que j'ai placé dans mon nœud de stations.

"STATIONS": {
    "GENRES": {
        "D&B": {
            "RODR": false
        },
        "HipHop": {
            "RODR": false
        },
        "TRANCE": {
            "RODR": true
        }
    },
    "RODR": {
        "PROMOTED": false,
        "downvote": 2,
        "image": "image url",
        "station": "Revolution Of Dance Radio",
        "tag": "We Are The Revolution",
        "upvote": 1001,
        "url": "to be added"
    },
    "UKNRADIO": {
        "Promoted": false,
        "downvote": 2,
        "image": "url for image",
        "station": "UKN RADIO",
        "tag": "The Home Of The Mashup",
        "upvote": 1001,
        "url": "to add"
    }
},

puis j'ai ces enfants dans un noeud séparé avec la clé définie comme étant la même que la clé de l'index.

comment puis-je interroger le noeud genre pour obtenir tous les éléments dans l'index trance ? qui dans cet exemple serait RODR ?

Edit*** cette valeur permet d'accéder au bon enfant dans mon nœud Genres.

String value = getArguments().getString("Genre");
    Log.i("Genre_bundle",value);

Voici le code de base pour afficher ma liste

String DATABASE_CHILD = "STATIONS";
    ref = db.getReference().child(DATABASE_CHILD);

Edit**** 26/03/2021 J'ai essayé de configurer la requête dans un listener séparé pour obtenir la clé dont j'ai besoin. Cela fonctionne mais seulement s'il n'y a qu'un seul élément dans le nœud. Dès que j'en ajoute un deuxième, par exemple uknradio= true, il ne s'affiche pas.

 String DATABASE_CHILD = "STATIONS";
    ref = db.getReference().child(DATABASE_CHILD).child("GENRES").child(value);

    Query query = ref.orderByValue().equalTo(true);

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot dataSnapshot: snapshot.getChildren())
                KEYS = dataSnapshot.getKey();

                Log.i("KEY", KEYS);
                getStations(KEYS);

        }

 private void getStations(String Key) {
    String DATABASE_CHILD = "STATIONS";
    ref1 = db.getReference().child(DATABASE_CHILD);
    ref1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot snap : snapshot.getChildren()) {
                String key_Checker = snap.getKey();

                if (KEYS.matches(key_Checker)) {
                    Log.i("KEY", "Present");

Edit 26/3/2021 (Suppression du lien vers un tutoriel inutile sur les .index dans les paramètres de sécurité)

2voto

Frank van Puffelen Points 16029

Si vous voulez lire les stations pour le TRANCE genre, c'est un processus en deux étapes :

  1. Lire l'article /STATIONS/GENRES/TRANCE pour obtenir les clés des stations.
  2. Passez en revue les touches et lisez les informations de chaque station à tour de rôle.

Dans un code avec des valeurs codées en dur, la boucle serait la suivante :

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference genreRef = rootRef.child("STATIONS/GENRES/TRANCE");
genreRef.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot genreSnapshot) {
        for (DataSnapshot stationKeySnapshot: genreSnapshot.getChildren()) {
            String stationKey = stationKeySnapshot.getKey();

            DatabaseReference stationRef = rootRef.child("STATIONS").child(stationKey);
            stationRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot stationSnapshot) {
                    Log.i("DB", stationSnapshot.child("station").getValue(String.class);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    throw databaseError.toException();
                }
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

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