Java 如何避免调用OneEvent(QuerySnapshot快照,FirestoreException错误),以使用带有firestore的snapshotListener删除邮件?
我正在使用Java中的Firestore,方法如下:Java 如何避免调用OneEvent(QuerySnapshot快照,FirestoreException错误),以使用带有firestore的snapshotListener删除邮件?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我正在使用Java中的Firestore,方法如下: firestore.collection("myCollection").addSnapshotListener(listener); 我的听众是: EventListener<QuerySnapshot> listener = new EventListener<QuerySnapshot>() { WriteBatch wb = firestore.batch(); @Over
firestore.collection("myCollection").addSnapshotListener(listener);
我的听众是:
EventListener<QuerySnapshot> listener = new EventListener<QuerySnapshot>() {
WriteBatch wb = firestore.batch();
@Override
public void onEvent(QuerySnapshot snapshots, FirestoreException error) {
snapshots.forEach(doc -> {
// do something with the doc and then delete it
...
wb.delete(doc.getReference()
}
wb.commit();
}
EventListener=neweventlistener(){
WriteBatch wb=firestore.batch();
@凌驾
public void OneEvent(QuerySnapshot快照,FirestoreException错误){
快照。forEach(文档->{
//对文档执行某些操作,然后将其删除
...
wb.delete(doc.getReference()
}
提交();
}
问题是,当我删除文档时,我再次调用onEvent
方法。有没有办法避免它
有办法避免吗
当然有。您正在做的是添加一个实时侦听器,每当您在myCollection
位置进行更改时,该侦听器都会被触发。无论是删除、写入还是更新操作,onEvent()
方法激发。为了避免这种情况,您应该使用Query的方法只获取一次数据。这是Firebase实时数据库中相应的addListenerForSingleValueEvent()
方法
编辑:
根据你的评论:
有没有一种方法可以使用侦听器,并仅通过创建(或创建和更新)操作触发OneEvent
是的,确实如此,您可以使用switch语句查看快照之间的更改,正如有关的官方文档所解释的那样
在查询快照之间查看查询结果的实际更改通常很有用,而不是简单地使用整个查询快照。例如,您可能希望在添加、删除和修改单个文档时维护缓存
但是,通过这种方式,使用get()方法,我必须每2分钟安排一次调用(例如),而不是使用侦听器,我会立即获得新数据。唯一的问题是,一旦我读取了新数据,我想删除它,但此操作会再次触发OneEvent()。有一种方法可以使用侦听器,并仅使用create启动OneEvent(或创建和更新)操作?