Когда я вызываю listPost(), он возвращает NULL. Думаю, он не дождался, когда слушатель получит сообщение от firebase. Как я могу подождать, чтобы получить сообщение от firebase до возвращения arrayPost?Извлечение данных из возвратной базы базы данных NULL
public Post[] listPost() {
ArrayList<Post> list = new ArrayList<Post>();
// Fetch post from firebase
postRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for(DataSnapshot child : snapshot.getChildren()) {
String id = child.getKey();
String title = child.child("title").getValue().toString();
String content = child.child("content").getValue().toString();
String date = child.child("date").getValue().toString();
String status = child.child("status").getValue().toString();
Post post = new Post();
post.setId(id);
post.setTitle(title);
post.setContent(content);
post.setDate(date);
post.setStatus(status);
list.add(post);
}
}
@Override
public void onCancelled(FirebaseError error) {
System.out.println("The read failed: " + error.getMessage());
}
});
// Convert ArrayList to Array
Post[] arrayPost = new Post[list.size()];
list.toArray(arrayPost);
return arrayPost;
}
В общем случае (это не относится к Firebase) вы можете просто дождаться окончания операции, используя некоторую комбинацию методов 'Object.wait' и' Object.notify' Java. Я не могу быстро найти хороший пример прямо сейчас, поэтому надеюсь, что этого достаточно, чтобы вы начали, пока кто-то не даст ответ. –
Привет! Пожалуйста, прочитайте руководство по Java/Android (https://www.firebase.com/docs/android/guide/), которое охватывает основные 101 основы, такие как чтение данных и использование обратных вызовов событий. – Kato