Ich schreibe eine Methode, mit der ich eine Datenbank abfragen und eine andere Methode ausführen möchte, nachdem die Abfrage beendet wurde. Da der Aufruf der Datenbank asynchron ist, aber ich kann nicht scheinen, um herauszufinden, wie die Hauptströmung der Ausführung zu stoppen, bis der Datenbank-Aufruf abgeschlossen ist, etwa so:Asynchroner Ausführungsablauf in Java
public void getUserFromEmail(String email) {
Firebase usersRef = rootRef.child("users");
//Asynchronous database call, want to stop everything else
usersRef.orderByKey().equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println(firebaseError.getMessage());
}
});
//Perform some more operations after database call is finished
}
Ich bin es gewohnt, zu arbeiten mit asynchronen Callbacks in Nodejs, aber ich kann nicht herausfinden, ob es eine gleichwertige Möglichkeit gibt, den Ausführungsfluss in Java zu steuern. Gibt es einen einfachen Weg, um das zu erreichen, was ich tun möchte?
Was passiert, wenn ich einen Wert aus dem ursprünglichen meyhod einmal der Rückruf erfolgt zurückkehren wollte? – Matt
Die Methode ist "ungültig". Sie können nicht zurückkehren. Du solltest auch nicht wirklich. Async spielt nicht gut mit der Anweisung 'return' –
Sie können die Benutzeroberfläche direkt aus den Daten aktualisieren, die Sie aus 'dataSnapshot' innerhalb des Callbacks erhalten. –