我有这段代码从特定的子集合中获取数据:
Cannot call setState of undefined
但我需要在通过快照获取所有数据后调用方法。怎么实现呢?我应该测试什么?
答案 0 :(得分:2)
如何知道Snapshot Listener已完成?
Snapshot Listener始终在监听更改,除非您是removing it。
如果您想知道数据从数据库加载完成的时间,请注意您无法知道所有members
已完成下载的时间因为Cloud Fireatore
是实时数据库并且获取数据可能永远不会完成。这就是为什么命名为实时数据库,因为在任何momemnt中members
集合下的数据都可以更改,可以添加或删除属性。
只有在您写或更新数据时才能使用CompletionListener
,并且当Firebase服务器确认您的操作时您会收到通知读取数据时无法使用此界面。
答案 1 :(得分:0)
在检索对象列表之后,调用您的方法来处理对象列表:
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
id.add(document.getId());
Log.e(Tag, document.getId() + " => " + document.getData());
if (task.getResult().isEmpty()) {
Log.d(Tag, "onSuccess: LIST EMPTY");
return;
} else {
// Convert the whole Query Snapshot to a list
// of objects directly! No need to fetch each
// document.
Log.e(Tag, task.getResult() + "");
typeAll = task.getResult().toObjects(GroupMembers.class);
// do something with typeall here
}
}
} else {
Log.e(Tag, "Error getting documents: ", task.getException());
}