【发布时间】:2016-05-04 19:55:45
【问题描述】:
我目前正在开发一款用于存储图书翻译的 Android 应用。我正在使用 Firebase 在线保存所有数据,并且可以轻松地从中提取数据并将它们存储为 Book 对象。我在主类中有一个主列表,其中存储了 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)。但是,如果我在该代码主体(最后一行)之外调用相同的打印语句,它会给我 0。我不知道为什么,因为它成功地将它添加到 onDataChange() 方法中,但它似乎没有应用更改在外面。
【问题讨论】:
-
Shadab 的回答解释了这一点:您现在无法返回尚未加载的内容。您可能还想在这里阅读我的答案:stackoverflow.com/questions/33203379/…。它使用了更多的词来解释它(尽管在不同的上下文中:写入数据)。
标签: android firebase firebase-realtime-database