我正在使用 Firebase childEventListener
,它将 N 次添加到 Node
中以从数据库获取数据。
现在我正在尝试删除 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);
}
它似乎不起作用,并且我得到了重复的数据。 任何帮助都是appriced
最佳答案
调用removeEventListener()
将从该位置删除监听器。在调用它之后,它不会为收到的任何数据触发事件。它可能仍会针对已收到的数据触发一些事件。
Jonny's answer on the firebase-talk group关于同样的行为:
events are queued up asynchronously and potentially run on a different thread, so there might have been events queued up before you call removeEventListener.
关于android - 删除 ChildEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46140289/