onChildRemoved Firebase中嵌套节点的监听器不起作用

时间:2016-08-13 20:50:42

标签: java firebase

enter image description here

我在“subject”节点上有一个ChildEventListener,如下所示:

    mSubjectsFirebase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
          // This does not get called when I delete the blue circled item.
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
当我删除带圆圈蓝色的项目时,

onChildRemoved不会被调用。 那么如何知道蓝色项目是否已被删除?

我不想将ChildEventListener放到它下面的节点上,因为它是一个push()节点,并且会有数百个..

1 个答案:

答案 0 :(得分:1)

Firebase API documentation for Android并未对儿童事件说太多。 (JavaScript documentation更全面。)

但是,其中一个Android guides

中有更详细的内容
  

每次修改子节点时都会触发 onChildChanged()回调。 这包括对子节点后代的任何修改。

文档没有明确声明其他人不包含子节点的后代,但我的经验 - 以及您的经验 - 表明onChildChanged()回调是唯一一个为子节点的后代触发的回调

不幸的是,Android API与Jav​​aScript和iOS API的区别在于,这将使您难以解决问题。

使用JavaScript和iOS API,可以收听特定事件。例如,使用JavaScript,我会调用on("child_removed", (snapshot) => { ... })。使用Android API,所有子事件都已合并到一个侦听器中 - 据我所知 - 您无法添加只监听与{对应的事件的ChildEventListener {1}}功能。