删除ChildEventListener

时间:2017-09-10 11:38:48

标签: android firebase firebase-realtime-database

我正在使用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);
    }

它似乎不起作用,我得到重复的数据。 任何帮助都是适当的

1 个答案:

答案 0 :(得分:3)

调用removeEventListener()会从该位置删除侦听器。调用后收到的任何数据都不会触发事件。它可能仍会为已经收到的数据触发一些事件。

Jonny's answer on the firebase-talk group关于同样的行为:

  

事件以异步方式排队并可能在不同的线程上运行,因此在调用removeEventListener之前可能已经排队了事件。