如何停止在Firestore中获取数据?

时间:2018-06-18 14:04:23

标签: java android firebase google-cloud-firestore

我正在使用Firestore构建应用程序作为我的后端。我需要从数据库中获得每一个新的变化。

代码

EventListener<DocumentSnapshot> listener = new EventListener<DocumentSnapshot>() {
    @Override
    public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) {
        if (snapshot != null && snapshot.exists()) {
            DataClass dataClass = snapshot.toObject(DataClass.class);
            processesData(dataClass); // process data from db.
        }
    }
};

ListenerRegistration listenerReg = dataDocumentReference.addSnapshotListener(listener);

当我关闭应用程序时,应用程序仍在获取数据。

我读到我可以关闭连接。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,您需要停止收听更改,这可以通过onStop()方法调用remove()方法在ListenerRegistration方法中完成,如下所示:

@Override
protected void onStop() {
    super.onStop();

    if (listenerReg != null) {
        listenerReg.remove();
    }
}

请记住,当您使用addSnapshotListener时,您会附加一个侦听器,该侦听器会针对数据库中发生的每个更改进行调用。所以当你的应用程序关闭时也会发生这种情况,因此在活动被销毁之前它必须detach the listeners

如果您的应用中不需要实时获取数据,则可以直接在引用上使用get()调用,该引用只读取文档一次。因为它只读取一次,所以没有被删除的监听器。这是Firebase实时数据库中使用的addListenerForSingleValueEvent()的通讯记录。

同样@giudigior在他的回答中说,您也可以将您的活动作为addSnapshotListener()方法中的第一个参数传递,因此Firestore可以在活动停止时自动清理监听器。

ListenerRegistration listenerReg = dataDocumentReference
            .addSnapshotListener(YourActivity.this, listener);

答案 1 :(得分:1)

您可以在addSnapshotListener中传递活动,因此Firestore可以在活动停止时自动清理听众。

ListenerRegistration listenerReg = dataDocumentReference.addSnapshotListener(MainActivity.this, listener);

我已添加MainActivity作为示例。您必须添加Activity才能使其正常运行。