2017-10-04 5 views
1

Ceci est une grande question sur la différence entre l'exécution d'une requête sur des données Firebase vs accéder aux données sans utiliser la classe de requête.Est-ce que le DataSnapshot retourné par l'ajout d'un auditeur à une requête différente à celle d'un ajouté directement à un DatabaseReference

Voici la structure d'une requête, tirée de la documentation et dégrossi un peu:

DatabaseReference myRef = database.getReference("Users"); 

Query exampleQuery = myRef.orderByChild("age"); 

exampleQuery.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 

      // Do something... 

     } 
    } 
}); 

regardant et la lecture que l'on doit augmenter sur la DataSnapshot, me conduire à se demander si elle diffère à la DataSnapshot retured dans l'exemple ci-dessous, et sinon, est-il exact de penser à la classe de requête comme rien de plus qu'un intermédiaire pour ajouter le tri et le filtrage des données avant de travailler avec elle, et donc bien d'ajouter une boucle quand ne pas utiliser la classe de requête, comme dans l'exemple ci-dessous?

DatabaseReference myRef = database.getReference("Users"); 

myRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 

      // Do something... 

     } 
    } 
}); 

Je me rends compte que cette question peut sembler banal, mais je n'ai pas rencontré des exemples d'une boucle utilisée lorsque la classe de requête n'est pas, me donc vouloir confirmer que les deux ne sont pas liés.

Répondre

1

Jetez un oeil à ce Documentation. Vous trouverez

public class DatabaseReference extends Query 

qui signifie que chaque méthodes de la classe Query sont également héritées à la classe DatabaseReference. Le DataSnapshot retourné en ajoutant un écouteur à une requête diffère-t-il de celui ajouté directement à un DatabaseReference?

Non, ils sont identiques sauf si les références ne sont pas différentes.

Où utiliser Query alors? Je crois que la classe Query est habituellement utilisée pour filtrer les résultats et si vous avez plusieurs requêtes à faire.
Voir this aussi. FirebaseRecyclerAdapter besoins et accepte seulement une instance de classe Query pas DatabaseReference.