Je voudrais tester si des données existent dans Firebase avant de les ajouter. Mais j'ai un problème avec ma méthode: j'essaie de lister toutes les données avec ce code Javascript:
var theDataToAdd = userName;
var usersRef = new Firebase('https://SampleChat.firebaseIO-demo.com/users/');
usersRef.on('child_added', function(snapshot) {
var message = snapshot.val();
if (message.name == theDataToAdd)
alert ("exist");
});
Mais si l'utilisateur n'existe pas, il sera ajouté avant, alors mon code dit qu'il existe. Vous direz que c'est normal parce que mon alerte n'est appelée que lorsque "child_added", mais je ne vois pas comment faire.
J'ai également essayé avec l'événement "value" mais mon "message.name" est vide.
Comment puis-je le réparer?
Vous pouvez utiliser DataSnapshot.hasChild
pour déterminer si un certain enfant existe.
usersRef.once('value', function(snapshot) {
if (snapshot.hasChild(theDataToAdd)) {
alert('exists');
}
});
Voici un rapide jsfiddle montrant comment cela fonctionne: http://jsfiddle.net/PZ567/
Mais cela téléchargera toutes les données sous usersRef
et effectuera la vérification sur le client. Il est beaucoup plus efficace de télécharger uniquement les données de l'utilisateur que vous souhaitez vérifier, en chargeant une référence plus ciblée:
usersRef.child(theDataToAdd).once('value', function(snapshot) {
if (snapshot.exists()) {
alert('exists');
}
});
J'utilise le code suivant:
var theDataToAdd = userName;
var ref = new Firebase('https://SampleChat.firebaseIO-demo.com/users/' + theDataToAdd);
ref.on('value', function(snapshot) {
if (snapshot.exists())
alert ("exist");
else
alert ("not exist");
});
Ma méthode est plus légère que cela:
usersRef.once('value', function(snapshot) {
if (snapshot.hasChild(theDataToAdd)) {
alert('exists');
}
});
car un client ne récupérera pas toutes les données des utilisateurs, ce qui peut être énorme.
Moyen de vérifier si des données existent ou non dans une base de données Firebase pour Android.
final Firebase firebaseRef = new Firebase(<Your_Firebase_URL>/Users).child(username);
firebaseRef.addListenerForSingleValueEvent(new ValueEventListener) {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// User Exists
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});