Comment puis-je vérifier si une valeur existe déjà dans un Firebase classe de données Android
Je veux vérifier si le numéro de bus existent déjà dans la base de données de Firebase.
Voici mon exemple de code. J'ai été à la recherche de ses derniers jours, mais je ne peux pas trouver le bon code pour le faire.
ref = new Firebase(Config.FIREBASE_URL);
postRef = ref.child("BusNumber");
busNum = edtBus.getText().toString().trim();
route1 = route.trim();
seat = edtSeat.getText().toString().trim();
if (!busNum.isEmpty() && !route1.isEmpty() && !seat.isEmpty()) {
postRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(busNum).exists()) {
edtBus.setError("Bus number already exists.");
edtBus.setText("");
} else {
busNumber = new BusNumber();
busNumber.setBusNum(busNum);
busNumber.setRoute(route1);
busNumber.setNumSeat(seat);
postRef.push().setValue(busNumber);
edtBus.setText("");
edtSeat.setText("");
Toast.makeText(AddBusActivity.this, "Saving successful!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Toast.makeText(AddBusActivity.this, "Error", Toast.LENGTH_SHORT).show();
Toast.makeText(AddBusActivity.this, firebaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(AddBusActivity.this, "Please complete the information", Toast.LENGTH_SHORT).show();
}
Quelqu'un peut-il m'aider avec cette question? Merci à l'avance.
Si la si la déclaration est correcte ou non, aussi mon problème, c'est pourquoi le postRef.addListenerForSingleValueEvent
...ne fonctionne pas? J'ai essayé de tester des toasts message, mais le message n'est pas de la pop.
avez-vous des firebase règles d'installation, vous empêchant de lecture de la base de données? Peut-être ajouter un Journal dans le onCanceled et d'imprimer les firebase d'erreur si il y en a un.
oui je l'ai déjà fait. Mais aussi loin que je me souvienne. Il n'y a pas d'erreur
Avez-vous trouvé la solution?
ce que vous n'avez pas utiliser le calback de la fonction et de l'interface, j'ai également le même problème que le votre que pour ( datasnap shot /....) complète de la méthode n'a pas fonctionné il vient de donner si la valeur null ou d'une référence d'objet nul ou que vous n'avez pas obtenir la valeur souhaitée pour voir le lien de ma question .. et une belle personne me guider en me donnant le lien .. le premier lien m'a aidé j'ai utiliser le callback et interface truc. [Whey votre code firebase de la base de données ne fonctionne pas cliquez sur ce lien ](stackoverflow.com/questions/51582992/...)
oui je l'ai déjà fait. Mais aussi loin que je me souvienne. Il n'y a pas d'erreur
Avez-vous trouvé la solution?
ce que vous n'avez pas utiliser le calback de la fonction et de l'interface, j'ai également le même problème que le votre que pour ( datasnap shot /....) complète de la méthode n'a pas fonctionné il vient de donner si la valeur null ou d'une référence d'objet nul ou que vous n'avez pas obtenir la valeur souhaitée pour voir le lien de ma question .. et une belle personne me guider en me donnant le lien .. le premier lien m'a aidé j'ai utiliser le callback et interface truc. [Whey votre code firebase de la base de données ne fonctionne pas cliquez sur ce lien ](stackoverflow.com/questions/51582992/...)
OriginalL'auteur tin | 2016-08-15
Vous devez vous connecter pour publier un commentaire.
Votre approche est erronée.
Lorsque vous faites cela
dataSnapshot.child(busNum).exists()
, il est à la recherche pour lebusNum
dans la section clé, où vos clés sont-kasajdh...
.Ainsi, au lieu de ce que vous pouvez faire, c'est obtenir le
iterable
, maintenant, quand vous regardez pourdata.child(busNum).exists()
il se rapporte à la valeurOriginalL'auteur silverFoxA
Plutôt que de sortir un tout objet iterable liste de données, vous pouvez requête exacte de l'entrée.
OriginalL'auteur Vishal Sharma
devrait fonctionner.
Vérifiez votre Firebase auth règles peut-être? Les règles pourraient vous empêcher de le faire.
Mais je ne suis pas la création d'un nouvel utilisateur. Il est stocké dans la base de données. Dois-je encore besoin de vérifier mon auth règles?
désolé, je voulais dire votre base de données de règles, pas d'auth
Un autre problème peut être que vous êtes en utilisant de vieux Firebase de sorte qu'il peut être déconseillé?
OriginalL'auteur Abhi V
Il est difficile de deviner quel est le problème parce que vous n'avez pas de montrer comment
busNum
etbusNumber
sont définis et gérés. EstbusNumber
une Chaîne de caractères?push()
crée une référence à un auto-généré à l'enfant de l'emplacement. L'auto-clé générée ressemble à quelque chose comme-KPB_cS74yoDaKkM9CNB
.La déclaration
postRef.push().setValue(busNumber)
magasins de valeurbusNumber
dans un endroitBusNumber/<push-generated-key>
.La déclaration
dataSnapshot.child(busNum).exists()
tests pour l'existence d'une valeur à l'emplacementBusNumber/<busNum>
. Il ne sera pas vrai, à moins quebusNum
est l'une des clés créées parpush()
.Il n'est pas clair comment vous souhaitez que vos données structurées. Si vos numéros de bus sont des Chaînes de caractères et sont uniques, vous n'avez pas besoin de générer une clé avec
push()
. Vous pouvez stocker l'existence de numéros de bus à l'aide de:postRef.child(busNumber).setValue(true)
Est
busNumber
une Chaîne de caractères?oui, monsieur!.
busNumber
est une chaîne de caractèresstackoverflow.com/questions/43752247/...
OriginalL'auteur Bob Snyder