Java 如何停止在Firestore中获取数据?
我正在使用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
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
作为示例。您必须添加您的活动
,才能使其正常工作