attendre jusqu'à ce que firebase récupère les données

Je veux construire une méthode qui retourne un child valeur dans FireBase. J'ai essayé de faire quelque chose comme ceci:

public String getMessage(){

    root.child("MessagesOnLaunch").child("Message").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            message = (String) dataSnapshot.getValue();
            Log.i("4r398", "work");
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.e("error", firebaseError.getMessage());
        }
    });
    return message;
}

Le problème est que la méthode renvoie null c'est probablement parce que la méthode n'attendez pas jusqu'à ce que l'auditeur de finitions et de retour null parce que ses la valeur par défaut de message.
Comment puis-je faire de cette méthode attendre jusqu'à ce que l'auditeur se produit et puis retourner la valeur.

assumer la racine est stocké sur la classe et la classe n'est pas gc ed), il ne devrait pas question que la fonction est terminée
Vous ne pouvez pas synchrone retour asynchrone valeur. Le message variable ici est totalement inutile, car il ne va pas être définies à la fois, il retourne--les données doivent être récupérées à partir du serveur en premier. Au lieu de cela, getMessage() doit accepter un rappel de certains de tri ou le déclenchement d'un événement. Il y a un guide dédié à ces concepts, calées plein d'exemples et de conseils.
l'Utilisation de cette Réponse. J'ai rencontré le même problème et l'a résolu en utilisant EventBus.

OriginalL'auteur ben | 2015-06-05