我正在使用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);
当我关闭应用程序时,应用程序仍在获取数据。
我读到我可以关闭连接。我怎么能这样做?
答案 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
才能使其正常运行。