android - 删除 ChildEventListener

标签 android firebase firebase-realtime-database

我正在使用 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/

相关文章:

java - Android:如何更改下载文件的文件名?

android - Cordova - 静态 HTML/JS/CSS 是否可以在可分发的设备特定文件中加密

java - 如何更新自定义适配器中的 ListView ?

ios - 从 firebase 检索唯一数据

ios - 从函数返回之前等待 Firebase 加载

Android - 按下列表项 View 时弹出菜单?

java - Android: NoSuchMethodError: 没有静态方法 zzy(Ljava/lang/Object;

swift - TableView 不打印任何单元格(快速)

android - 为什么我在 Firebase-Real 数据库中得到的是 ArrayList 而不是 HashMap?

android - 基于更改并存储到 map 中的 DataSnapshot 出错