我正在使用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()
method 来在方法中完成ListenerRegistration
以下操作:
@Override
protected void onStop() {
super.onStop();
if (listenerReg != null) {
listenerReg.remove();
}
}
请记住,在使用addSnapshotListener时,将附加一个侦听器,该侦听器将针对数据库中发生的每个更改而调用。因此,在关闭应用程序时也会发生这种情况,因此必须在活动被销毁之前分离侦听器。
如果在您的应用程序中您不需要实时获取数据,则可以直接在引用上使用get()调用,该引用仅读取一次文档。由于它只读取一次,因此没有要删除的侦听器。这是addListenerForSingleValueEvent()
Firebase Realtime数据库中使用的通讯员。
就像@giudigior在回答中所说的那样,您还可以将活动作为方法中的第一个参数传递addSnapshotListener()
,因此Firestore可以在活动停止时自动清理侦听器。
ListenerRegistration listenerReg = dataDocumentReference
.addSnapshotListener(YourActivity.this, listener);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句