如何知道Snapshot Listener已完成|公司的FireStore?

时间:2018-04-30 20:42:21

标签: java android firebase google-cloud-firestore

我有这段代码从特定的子集合中获取数据:

Cannot call setState of undefined

但我需要在通过快照获取所有数据后调用方法。怎么实现呢?我应该测试什么?

2 个答案:

答案 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());
                            }