Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebasedatabase-如何计数子节点_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebasedatabase-如何计数子节点

Android Firebasedatabase-如何计数子节点,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在使用Firebase作为数据库。我想知道如何计算父亲的孩子。我想做的是,如果没有孩子,我想显示文本视图,但是如果父亲下面有孩子,我想显示所有孩子的循环视图。 在用户ID下保存的每个组。在用户ID下保存用户已打开的所有组。 我试过几种方法,但仍然不知道怎么做。 请看图片链接,希望您能理解 编辑: 计数儿童的代码 refCountMembers.getReference(Params.GROUP_LISTS).child(currentUser.getUid()).addChildEve

我正在使用Firebase作为数据库。我想知道如何计算父亲的孩子。我想做的是,如果没有孩子,我想显示文本视图,但是如果父亲下面有孩子,我想显示所有孩子的循环视图。 在用户ID下保存的每个组。在用户ID下保存用户已打开的所有组。 我试过几种方法,但仍然不知道怎么做。 请看图片链接,希望您能理解

编辑:

计数儿童的代码

  refCountMembers.getReference(Params.GROUP_LISTS).child(currentUser.getUid()).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                long count = snapshot.getChildrenCount(); 
                if(snapshot.getChildrenCount() == 0) {
                    +"");                 
                    tvEmptyListGroup.setVisibility(View.VISIBLE);
                    break;
                }else{
                    progressBar.setVisibility(View.INVISIBLE);
                    tvEmptyListGroup.setVisibility(View.INVISIBLE);
                    ref = FirebaseDatabase.getInstance().getReference(Params.GROUP_LISTS).child(currentUser.getUid());
                    GroupsAdapter adapter = new GroupsAdapter(ref,getParentFragment(),progressBar);
                    rvGroup.setAdapter(adapter);
                    rvGroup.setLayoutManager(new LinearLayoutManager(getContext()));
     }
   }
  }
我之所以使用childEventListener,是因为我想确保在删除一个组时有0个组,这样它就会显示文本视图,或者如果我要添加一个组,它就会显示recyclerView。
childEventListener会在每次发生更改时启动,对吗?

创建一个模型类作为您的组信息

public class Group {
    private String groupName;
    private String groupUID;
    private String ownerGroupUID;

    // Getters and setters
}
现在将所有组保存在用户Id下

    final List<Group> groupList = new ArrayList<>(); // list of groups
    FirebaseDatabase.getInstance()
            .getReference()
            .child("GroupLists")
            .child("dS...") // this is the id of user - over whose groups you want to iterate
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                        Group group = snapshot.getValue(Group.class); // this is a group
                        groupList.add(group); // add to list
                    }

                    if (groupList.size()>0){
                        // Now display all groups in recycler view..

                    } else {
                        // Now display in textview that group list is empty

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

}
final List groupList=new ArrayList();//团体名单
FirebaseDatabase.getInstance()
.getReference()
.child(“组列表”)
.child(“dS…”)//这是用户的id-您要迭代其组
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Group Group=snapshot.getValue(Group.class);//这是一个组
groupList.add(group);//添加到列表
}
if(groupList.size()>0){
//现在在“回收器”视图中显示所有组。。
}否则{
//现在在textview中显示组列表为空
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}

创建一个模型类作为您的组信息

public class Group {
    private String groupName;
    private String groupUID;
    private String ownerGroupUID;

    // Getters and setters
}
现在将所有组保存在用户Id下

    final List<Group> groupList = new ArrayList<>(); // list of groups
    FirebaseDatabase.getInstance()
            .getReference()
            .child("GroupLists")
            .child("dS...") // this is the id of user - over whose groups you want to iterate
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                        Group group = snapshot.getValue(Group.class); // this is a group
                        groupList.add(group); // add to list
                    }

                    if (groupList.size()>0){
                        // Now display all groups in recycler view..

                    } else {
                        // Now display in textview that group list is empty

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

}
final List groupList=new ArrayList();//团体名单
FirebaseDatabase.getInstance()
.getReference()
.child(“组列表”)
.child(“dS…”)//这是用户的id-您要迭代其组
.addListenerForSingleValueEvent(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot快照:DataSnapshot.getChildren()){
Group Group=snapshot.getValue(Group.class);//这是一个组
groupList.add(group);//添加到列表
}
if(groupList.size()>0){
//现在在“回收器”视图中显示所有组。。
}否则{
//现在在textview中显示组列表为空
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}

解决方案可能涉及以下方面。在没有看到获取父节点的代码的情况下,很难提供更多帮助。我添加了我的代码。好吗?要检测是否没有子项,您需要保留自己的计数器(在
onchildeded
中递增,在
onChildRemoved
中递减),或者在同一位置上需要额外的
ValueEventListener
。在后一种情况下,可以使用
snapshot.getChildrenCount()==0
!snapshot.exists()
以检测是否缺少子节点。在这里也可以看到我的答案:(对于JavaScript,但Android SDK的工作原理是一样的)。谢谢,它真的很有帮助!解决方案很可能包括。在没有看到获取父节点的代码的情况下,很难提供更多帮助。我添加了我的代码。好吗?要检测是否没有子项,您需要保留自己的计数器(在
onchildeded
中递增,在
onChildRemoved
中递减),或者在同一位置上需要额外的
ValueEventListener
。在后一种情况下,可以使用
snapshot.getChildrenCount()==0
!snapshot.exists()
以检测是否缺少子节点。在这里也可以看到我的答案:(对于JavaScript,但Android SDK的工作原理是一样的)。谢谢,它真的很有帮助!