web-dev-qa-db-fra.com

Firebase interrogeant des données

{
  "random_key 1" : {
    "id": 0,
    "text": "This is text"
  },
  "random_key 2" : {
    "id": 1,
    "text": "This is text"
  }
}

Si je stocke mes données comme ceci, et que je veux obtenir le nœud où id est égal à 0. Comment puis je faire ça?

Ce qui précède est l’enfant de issue, qui est un enfant de root.

13
Chronix01

Dans votre cas, vous devez configurer une requête comme ceci:

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

    Query query = reference.child("issue").orderByChild("id").equalTo(0);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                // dataSnapshot is the "issue" node with all children with id 0
                for (DataSnapshot issue : dataSnapshot.getChildren()) {
                    // do something with the individual "issues"
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
34
Linxy

La réponse de @ Linxy est correcte, mais comme vous allez lire une liste d'éléments de la base de données, il est préférable d'utiliser un écouteur d'événements enfant au lieu de l'écouteur d'événements de valeur.

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        //Do something with the individual node here`enter code here`
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }


});

Ce code fonctionne pour moi

mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(final DataSnapshot dataSnapshot) {
                for (DataSnapshot data : dataSnapshot.getChildren()) {
                 //If email exists then toast shows else store the data on new key
                    if (!data.getValue(User.class).getEmail().equals(email)) {
                        mFirebaseDatabase.child(mFirebaseDatabase.Push().getKey()).setValue(new User(name, email));
                    } else {
                        Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show();
                    }
                }
            }

            @Override
            public void onCancelled(final DatabaseError databaseError) {
            }
        });
0
Rahul

Pour une intégration multi-plateformes de Firebase facile à utiliser, vous pouvez également consulter V-Play Engine pour les applications mobiles

FirebaseDatabase {
  id: firebaseDb

  Component.onCompleted: {
    //use query parameter:
    firebaseDb.getValue("public/bigqueryobject", {
                   orderByKey: true,  //order by key before limiting
                   startAt: "c",      //return only keys alphabetically after "c"
                   endAt: "m",        //return only keys alphabetically before "m"
                   limitToFirst: 5,   //return only first 5 sub-keys
    })
  }
}
0
user5315753