gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:04:01 25 4
gpt4 key购买 nike

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

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

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

最佳答案

为了解决这个问题,您需要停止监听变化,这可以在 onStop() 方法中通过调用 remove() 方法来完成 ListenerRegistration 像这样的对象:

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

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

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

如果在您的应用中您不需要实时获取数据,您可以使用 get()直接调用引用,它只读取文档一次。由于它只读取一次,因此没有要删除的监听器。这是 Firebase 实时数据库中使用的 addListenerForSingleValueEvent() 的对应对象。

正如@giudigior 在他的回答中所说,您还可以将 Activity 作为 addSnapshotListener() 方法中的第一个参数传递,这样 Firestore 就可以在 Activity 停止时自动清理监听器。

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

关于java - 如何停止在 Firestore 中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com