Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用这两种功能在Firebase- Android上收听数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Firebase上的数据是这样的

"node": {
   "node1": {
      "value1": value,"value2": value,"subSubNode":{
          //....values....//
       },},"node2": { ... },"node3": { ... }
  //...and so on ..//
}

第一:我想从Firebase获取所有数据并渲染到我的树,所以我使用了addListenerForSingleValueEvent()函数.

然后:我使用addChildEventListener()函数来监听节点或子节点何时更改,删除添加

private void getData(Query ref){
    ref.addListenerForSingleValueEvent(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            **I render data on my tree here**
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

    ref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot,String s) {
            Log.i(tag,"onChildAdded");
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot,"onChildChanged");
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            Log.i(tag,"onChildRemoved");
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot,"onChildMoved");
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            Log.i(tag,"onCancelled");
        }
    });
}

但是addChildEventListener()函数中的onChildAdded()方法总是先运行.我有什么想法或解决方案吗?我在该位置使用addChildEventListener()函数是否正确?

@H_@R_197_11263@_19@解决方法
ChildEventListener中的方法为初始数据和后续对该数据的更改触发.

一旦调用addChildEventListener(),就会为每个现有的子节点调用onChildAdded().您可以使用这些事件来构建初始树.添加初始数据后,随着数据的更改,您将收到对所有onChild …方法调用.

因此,不要注册addListenerForSingleValueEvent(),只需从ChildEventListener的方法构建树.

或者,如果要单独处理初始数据,可以使用event guarantees that Firebase has中的一个

@R_@R_197_11263@_8487@an isInitialValueLoaded = false;
ref.addListenerForSingleValueEvent(new ValueEventListener(){
    public void onDataChange(DataSnapshot dataSnapshot) {
        **I render data on my tree here**
        isInitialValueLoaded = true;
    }

    public void onCancelled(FirebaseError firebaseError) {
    }
});

ref.addChildEventListener(new ChildEventListener() {
    public void onChildAdded(DataSnapshot dataSnapshot,String s) {
        if (!isInitialValueLoaded) return;
        Log.i(tag,"onChildAdded");
    }

    public void onChildChanged(DataSnapshot dataSnapshot,"onChildChanged");
    }

    public void onChildRemoved(DataSnapshot dataSnapshot) {
        if (!isInitialValueLoaded) return;
        Log.i(tag,"onChildRemoved");
    }

    public void onChildMoved(DataSnapshot dataSnapshot,"onChildMoved");
    }

    public void onCancelled(FirebaseError firebaseError) {
        Log.i(tag,"onCancelled");
    }
});

大佬总结

以上是大佬教程为你收集整理的如何使用这两种功能在Firebase- Android上收听数据全部内容,希望文章能够帮你解决如何使用这两种功能在Firebase- Android上收听数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。