Dans mon application, je dois vérifier si un élément donné de ma base de données sur firebase a un enfant avec un prénom. J'espérais que cela pourrait être fait en utilisant quelque chose comme:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
if (rootRef.childExists("name")) {
//run some code
}
J'ai cherché mais je n'ai rien trouvé d'utile.
Edit 2; Cela vaut la peine d'être mentionné: Je pense qu'il est utile de mentionner qu'il s'agit en fait de télécharger toutes les données de cet instantané uniquement pour vérifier si des données existent. Vous devriez être conscient ici. Si la référence est énorme (par exemple, en fait la référence racine et non un enfant/propriété spécifique), vous devez trouver un nœud plus profond que vous pouvez utiliser pour vérifier l'existence ou bien concevoir votre structure de données différemment pour un contrôle efficace. est possible.
Une référence de base de données est effectivement l'URL de ces données. Vous voulez réellement obtenir données pour voir si un enfant existe. C'est pourquoi la méthode que vous semblez rechercher est sur DataSnapshot .
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
void onDataChange(DataSnapshot snapshot) {
if (snapshot.hasChild("name")) {
// run some code
}
}
});
Maintenant, ce modèle de conception semble un peu étrange. Vous lisez toute la base de données juste pour voir si "name" existe. Vous pouvez rendre ceci un peu plus efficace en écoutant rootRef.child("name")
et en vérifiant simplement si snapshot.exists()
.
Si vous essayez de faire validation ici, sans contrôler le flux, vous devriez envisager de mettre ce code dans votre rules.json
.
edit: j'ai initialement utilisé un nom de fonction incorrect (childExists au lieu de hasChild)
Essayez d’utiliser .childexists
en combinaison avec .equalTo("Your specific name")
UsersRef = FirebaseDatabase.getInstance().getReference();
Users.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.hasChild("childName")) {
// it exists!
}else{
// does not exist
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});