Firebaseからデータを取得してから、ArrayListを返したいとします。私はデータベースの変更を常に聞きたいとは思わない。私はちょうどすぐにデータベースを一度クエリしたいので、私はaddListenerForSingleValueEventを使用しています。これは私がデータベースからデータを取得して単純にそれを返すことができると思っていましたが、リストは残念ながら空です。 onDataChangeメソッドの最後にリストを更新しようとしましたが、リストが空であるためにまだ動作しません。Firebaseのデータ返信方法
private List<ContactsDTO> contacts = new ArrayList<>();
public void updateContacts(List<ContactsDTO> contacts) {
this.contacts = contacts;
}
public void getContactsDB() {
refContacts.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<ContactsDTO> temp = new ArrayList<>();
for(DataSnapshot child : dataSnapshot.getChildren()) {
ContactsDTO contactDTO = child.getValue(ContactsDTO.class);
temp.add(contactDTO);
}
updateContacts(temp);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("error");
}
});
}
public List<ContactsDTO> getContacts() {
getContactsDB();
System.out.println("contacts size: " + contacts.size()) // list will be empty
return contacts;
}
//編集:
デシベル構造が問題ではありませんが、あなたが望むように私はOnDataChangeの方法で正しくデータを取得:
をあなたは持っていますどのようにそれを達成するための任意のアイデア?
データベース構造を追加してください –
guiでリストが空であるのか、それともデバッグするのですか? –
私はそれをデバッグし、コンソールのリストサイズを出力するとき。 – scof93