Ich muss das Ergebnis der FireBase getValue-Methode speichern, die von ihm selbst asynchron ist. Ich kann so etwas wie “onPostExecute()” nicht verwenden und für meinen Zweck kann ich nicht alle meine Operationen “into onDataChange()” ausführen, da ich in Zukunft einige Referenzen in anderen Aktivitäten benötige.
Hier mein Snippet zum Abrufen von Daten:
List<Village> villages = new LinkedList<>();
Firebase ref = new Firebase("MYFIREBASEURL").child("village");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
spinnerArray.clear();
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Village v = postSnapshot.getValue(Village.class);
villages.add(v);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
Wenn ich versuche, Dörfer aus “onDataChange” auszulesen, habe ich natürlich für sein asynchrones Leben einen Nullwert. Es gibt eine Möglichkeit sicherzustellen, dass onDataChange aufgerufen wurde?.
Sie müssen Ihre Anforderungen umformulieren in “Immer wenn sich die Daten ändern, möchte ich ABC machen”. Oder Sie können auf die Daten warten, es ist möglich, nur nicht allgemein empfohlen. Siehe diese Fragen und Antworten für Details/Beispiele: stackoverflow.com/questions/33203379/…
– Frank van Puffelen
15. November 2015 um 19:59 Uhr