Je n'ai pas beaucoup d'expérience avec Java. Je ne sais pas si cette question est stupide, mais j'ai besoin d'obtenir un nom d'utilisateur à partir de la base de données en temps réel Firebase et de retourner ce nom comme résultat de cette méthode. J'ai donc trouvé comment obtenir cette valeur, mais je ne comprends pas comment la renvoyer comme résultat de cette méthode. Quelle est la meilleure façon de procéder ?
private String getUserName(String uid) {
databaseReference.child(String.format("users/%s/name", uid))
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// How to return this value?
dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
1 votes
Comme @PeterHaddad l'a mentionné, la méthode onDataChange est asynchrone, ce qui signifie qu'elle renverra toujours null. Puis-je demander : pourquoi avez-vous besoin de retourner le nom de l'utilisateur ? Pourquoi ne pas simplement utiliser ce nom dans la méthode onDataChange ?
2 votes
Comme l'a dit @PeterHaddad, parce que
onDataChange()
est appelée asynchrone, cela ne fonctionnera pas. Veuillez consulter ma réponse.1 votes
Lisez ceci pour comprendre pourquoi les API de Firebase sont asynchrones : medium.com/@CodingDoug/
0 votes
Lisez ceci pour comprendre comment résoudre le problème de la base de données asynchrone avec une ou plusieurs références à la base de données : stackoverflow.com/questions/48720701/