我想从Firebase获取数据,然后返回ArrayList。我不想经常听取数据库的变化。我只想立即查询数据库一次,所以我使用 addListenerForSingleValueEvent ,我认为这将允许我从数据库中获取数据并简单地返回它,但遗憾的是列表是空的。 我尝试在 onDataChange 方法结束时更新列表,但由于列表为空,它仍然无效。
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 方法中正确获取数据,因此db结构不是问题所在,但是如您所愿:
你知道如何实现它吗?