我正在使用Firebase childEventListener
,它会向Node
添加N次,以便从数据库中获取数据。
现在我正在尝试删除childEventListener
,但它似乎不起作用,我得到重复的数据。
query = FirebaseDatabase.getInstance().getReference()
.child("chat")
.child("room-messages")
.child(roomID)
.orderByChild("timestamp")
.limitToLast(index);
paginationListener = query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, dataSnapshot.getKey() + " - Single Value");
try {
Message message = dataSnapshot.getValue(Message.class);
message.setId(dataSnapshot.getKey());
EventBus.getDefault().post(new GetPaginatedMessage(message));
} catch (RuntimeException e) {
Log.d(TAG, "Type Cast Exception Caught");
}
}
并删除侦听器,如
if (query != null && paginationListener != null) {
query.removeEventListener(paginationListener);
}
它似乎不起作用,我得到重复的数据。 任何帮助都是适当的
答案 0 :(得分:3)
调用removeEventListener()
会从该位置删除侦听器。调用后收到的任何数据都不会触发事件。它可能仍会为已经收到的数据触发一些事件。
Jonny's answer on the firebase-talk group关于同样的行为:
事件以异步方式排队并可能在不同的线程上运行,因此在调用removeEventListener之前可能已经排队了事件。