web-dev-qa-db-fra.com

Comment obtenir la valeur enfant de l'enfant à partir de Firebase dans Android?

Comment obtenir la valeur ZNAME? Au départ, je dois comparer la clé (Ex :: Here ZONE_1), puis ZNAME doit être récupéré. Merci d'avance...

10
Surekha

Pour accéder à une valeur dans votre base de données, vous créez un DatabaseReference pour cet emplacement. Voici trois références à des emplacements dans votre base de données:

DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("ZONES");
DatabaseReference zone1Ref = zonesRef.child("ZONE_1");
DatabaseReference zone1NameRef = zone1Ref.child("ZNAME");

Dans cet extrait:

  • zonesRef pointe vers /ZONES
  • zone1Ref Pointe vers /ZONES/ZONE_1
  • zone1NameRef Pointe vers /ZONES/ZONE_1/ZNAME

Voir la documentation Firebase sur l'obtention d'une référence de base de données pour plus d'informations.

Vous pouvez attacher un écouteur à chacune des références, pour obtenir la valeur à cet emplacement. Par exemple, pour obtenir la valeur de /ZONES/ZONE_1/ZNAME:

zone1NameRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i(TAG, dataSnapshot.getValue(String.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});

Pour plus d'informations sur ce type d'opération de lecture, consultez la documentation Firebase sur la lecture des valeurs .

Si vous écoutez à la place sur /ZONES/ZONE_1, Vous obtiendrez un DataSnapshot du nœud entier avec toutes ses propriétés. Vous utilisez ensuite DataSnapshot.child() pour obtenir le ZNAME:

zone1Ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.i(TAG, dataSnapshot.child("ZNAME").getValue(String.class));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});

Un niveau de plus, vous pouvez écouter sur /ZONES, Qui vous donnera un instantané avec toutes les zones. Comme cela gère plusieurs enfants, vous devrez les parcourir avec DataSnapshot.getChildren():

zonesRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot zoneSnapshot: dataSnapshot.getChildren()) {
            Log.i(TAG, zoneSnapshot.child("ZNAME").getValue(String.class));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});

Voir à ce sujet la documentation Firebase sur l'écoute des listes de données .

Enfin, vous voudrez peut-être interroger pour trouver une zone spécifique, par exemple pour trouver la zone avec "ZCODE": "ECOR":

Query zonesQuery = zonesRef.orderByChild("ZCODE").equalTo("ECOR");
zonesQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot zoneSnapshot: dataSnapshot.getChildren()) {
            Log.i(TAG, zoneSnapshot.child("ZNAME").getValue(String.class));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "onCancelled", databaseError.toException());
    }
});

Pour en savoir plus, lisez la documentation Firebase sur le tri et le filtrage des données .

30