【问题标题】:firebase onChildAdded triggered even when no child is added即使没有添加孩子也会触发firebase onChildAdded
【发布时间】:2021-05-08 00:59:11
【问题描述】:

根据 Firebase 文档:

onChildAdded(DataSnapshot 快照, String previousChildName) 当一个新的孩子被添加到这个监听器被添加到的位置时,这个方法被触发。

但根据我在 Logcat 中收到的输出(通过我的方法 logresult()),我可以得出结论,即使我没有添加子项,也会触发 onChildAdded。并在我的节点“捕获”中触发每个子节点

她是我的密码

    private void startMonitoring(){
    paused=false;
    resetgraph();

    now = System.currentTimeMillis()/1000;
    starting = System.currentTimeMillis()/1000;
    starting = starting - starting%3600;

    //logresult(new Date(starting*1000).toString()+" "+new Date((starting+3600)*1000).toString());

    select_part(starting,starting+3600);
    if(listener!=null){
        captures.removeEventListener(listener);
    }

    listener = new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

            long timex = snapshot.child("date_captured").getValue(Long.class);
            starting = timex - (timex % 3600);
            logresult(new Date(starting*1000).toString()+" "+new Date((starting+3600)*1000).toString());

            if ((timex%3600>1)&&(!paused)){
                addentries(timex, snapshot.child("node1").getValue(dataTemplate.class));
            }else if(!paused){
                resetgraph();
                select_part(starting,starting+3600);
            }

            if(paused){
                captures.removeEventListener(this);
            }
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot snapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    };

    captures.addChildEventListener(listener);
   }

那么我的代码中缺少什么或做错了什么? 我还仔细检查了我是否将子节点添加到我的捕获节点但什么都没有

【问题讨论】:

    标签: java firebase firebase-realtime-database


    【解决方案1】:

    onChildAdded 在添加侦听器时为每个子节点触发,只有在添加额外的子节点时才会触发。所以你看到的是预期的行为。

    另请参阅listening for child events 上的文档,其中提到了onChildAdded

    检索项目列表或监听项目列表的添加。 每个现有的孩子都会触发一次此回调,然后每次将新的孩子添加到指定的路径时都会再次触发。传递给侦听器的 DataSnapshot 包含新孩子的数据。

    【讨论】:

    • 感谢您的回答。我阅读了您提供给我的链接,我遇到了onChildChanged()onChildMoved()。所以我可以使用它们而不是onChildAdded() 来解决我的问题吗?因为它们不会为每个现有的孩子触发一次,然后再触发一次......
    猜你喜欢
    • 2021-12-26
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多