Lorsque mon application démarre, je vérifie les détails de l'utilisateur actuel dans ma base de données Firebase (je stocke son uid pour cela).
J'attache addListenerForSingleValueEvent à la référence de l'utilisateur pour lire ses données.
Mon problème est que parfois, il ne renvoie aucune valeur, ni succès ni échec.
Seule la suppression des données de l'application permet de résoudre le problème, mais oblige bien entendu l'utilisateur à se connecter à nouveau.
J'ai lu quelques articles sur SO, mais je n'ai trouvé aucune solution.
Voici mon morceau de code:
DatabaseReference newUser =
FirebaseDatabase.getInstance().getReference("users/"+uid);
newUser.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot snapshot) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
La recommandation que j'ai vue à ce sujet est d'appeler keepSynced(true)
sur l'objet Query
.
Je suppose que user/:id
n'existe pas. Vérifiez deux fois votre sortie d'erreur:
DatabaseReference newUser = FirebaseDatabase.getInstance()
.getReference("users")
.child(uid)
.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot snapshot) {
if (snapshot.exists()) {
Log.i(TAG, snapshot.val());
} else {
Log.e(TAG, "Not found: " + uid);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.toString();
}
});