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

Java 如何停止在Firestore中获取数据?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在使用Firestore作为后端构建一个应用程序。我需要从数据库中获取每一个新的更改 代码 EventListener<DocumentSnapshot> listener = new EventListener<DocumentSnapshot>() { @Override public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreExcep

我正在使用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);
EventListener=neweventlistener(){
@凌驾
public void onEvent(@Nullable DocumentSnapshot snapshot,@Nullable FirebaseFirestoreException e){
if(snapshot!=null&&snapshot.exists()){
DataClass DataClass=snapshot.toObject(DataClass.class);
processesData(dataClass);//处理数据库中的数据。
}
}
};
ListenerRegistration listenerReg=dataDocumentReference.addSnapshotListener(监听器);
当我关闭应用程序时,应用程序仍在获取数据


我读到我可以关闭连接。如何才能做到这一点?

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

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

    if (listenerReg != null) {
        listenerReg.remove();
    }
}
请记住,当您使用时,会附加一个侦听器,该侦听器会为数据库中发生的每个更改调用。因此,当您的应用程序关闭时也会发生这种情况,因此必须在活动被破坏之前关闭

如果在你的应用程序中,你不需要实时获取数据,你可以直接在引用上使用调用,只需读取文档一次。因为它只读取一次,所以没有要删除的侦听器。这是Firebase实时数据库中使用的
addListenerForSingleValueEvent()
的对应项

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

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

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

ListenerRegistration listenerReg = dataDocumentReference
            .addSnapshotListener(YourActivity.this, listener);
ListenerRegistration listenerReg = dataDocumentReference.addSnapshotListener(MainActivity.this, listener);
我添加了
MainActivity
作为示例。您必须添加您的
活动
,才能使其正常工作