warten Sie, bis FB die Daten abruft

Ich bauen möchte, eine Methode, die zurückgibt einen child Wert in FireBase. Ich habe versucht, so etwas zu tun:

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;
}

Das problem ist, dass die Methode gibt null das ist wahrscheinlich, weil die Methode nicht warten, bis der listener beendet und zurück null weil seine default-Wert von message.
Wie kann ich diese Methode warten, bis der Hörer tritt und dann den Rückgabewert.

  • übernehmen root gespeichert ist, auf die Klasse (und die Klasse ist nicht gc ' ed ist), es sollte keine Rolle spielen, dass die Funktion abgeschlossen ist
  • Sie können nicht synchron Rückkehr eine asynchrone Wert. Die message variable hier ist völlig sinnlos, da es nicht an der Zeit, die es gibt--man muss die Daten vom server abgerufenen ersten. Stattdessen getMessage() sollte entweder akzeptieren Sie einen Rückruf von einer Art oder ein Ereignis auslösen. Es ist eine Anleitung für diese Konzepte, chocked voll von Beispielen und Tipps.
  • mit dieser Antwort. Ich habe vor dem gleichen Problem und gelöst mit EventBus.
InformationsquelleAutor ben | 2015-06-05
Schreibe einen Kommentar