【问题标题】:How to stop getting data in Firestore?如何停止在 Firestore 中获取数据?
【发布时间】:2018-06-18 14:04:23
【问题描述】:

我正在构建一个使用 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);

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

我读到我可以关闭连接。我该怎么做?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

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

    @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);
    

    【讨论】:

      【解决方案2】:

      您可以在addSnapshotListener 中传递活动,这样Firestore 可以在活动停止时自动清理监听器。

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

      我添加了MainActivity 作为示例。您必须添加您的 Activity 才能使其正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 2018-11-17
        • 2019-11-26
        • 2021-12-22
        • 2021-11-17
        • 2021-07-17
        • 1970-01-01
        相关资源
        最近更新 更多