Ich entwickle gerade eine Android-App, die sich mit der Speicherung von Buchübersetzungen beschäftigt. Ich verwende Firebase, um alle Daten online zu speichern, und ich habe keine Probleme, Daten daraus zu ziehen und sie als Buchobjekte zu speichern. Ich habe eine Hauptliste von Büchern in der Hauptklasse, in der alle Bücher aus der Firebase-Datenbank gespeichert sind. Die Liste scheint jedoch nicht ordnungsgemäß aktualisiert zu werden.Speichern von Daten aus Firebase in einer Liste
public static List<Book> books = new ArrayList<Book>();
protected void onCreate(Bundle savedInstanceState) {
myFirebaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot bookSnapshhot : snapshot.getChildren()) {
Book book = bookSnapshhot.getValue(Book.class);
books.add(book);
System.out.println(book.getAuthor() + " - " + book.getTitle());
for (Chapter chapter : book.getChapters()) {
System.out.println(chapter.getTitle());
}
for (Genre genre : book.getGenres()) {
System.out.println(genre.getGenre());
}
System.out.println(books.size());
}
}
@Override public void onCancelled(FirebaseError error) { }
});
System.out.println(books.size());
}
In diesem Körper ist die Größe der Bücher korrekt (im Moment ist es nur 1). Wenn ich jedoch die selbe print-Anweisung außerhalb dieses Code-Körpers (der letzten Zeile) anrufe, gibt es mir 0. Ich weiß nicht warum, denn es fügt es erfolgreich in die onDataChange() Methode ein, aber es scheint die Änderungen nicht anzuwenden draußen.
Shadabs Antwort erklärt es: Sie können jetzt nichts zurückgeben, das noch nicht geladen wurde. Vielleicht möchten Sie auch meine Antwort hier lesen: http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener. Es verwendet ein paar mehr Wörter, um es zu erklären (wenn auch in einem anderen Kontext: Schreiben von Daten). –