私は現在、書籍の翻訳を保管するAndroidアプリを開発中です。私はFirebaseを使ってすべてのデータをオンラインで保持していますが、データを引き出してBookオブジェクトとして保存するのに問題はありません。 Firebaseデータベースのすべての書籍を保存するメインクラスの本のマスターリストがありますが、リストは正しく更新されていないようです。Firebaseからリストにデータを保存する
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());
}
その本文では、書籍のサイズは正しいです(現在は1です)。しかし、私がそのコード本体(最後の行)の外で同じprintステートメントを呼び出すと、0が返されます。理由は分かりません。なぜなら、それはonDataChange()メソッド内に正常に追加されますが、外側に
Shadabの答えでは、まだロードされていないものを返すことはできません。また、私の答えはこちらをご覧ください:http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener。それはそれを説明するためにいくつかの言葉を使用しています(異なる文脈ではあるが、データを書く)。 –