【问题标题】:Firebasedatabase - how to count child nodeFirebasedatabase - 如何计算子节点
【发布时间】:2017-10-04 11:14:34
【问题描述】:

我使用 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 个组时,它会显示 textview,或者如果我要添加一个组,它应该显示 recyclerView。 childEventListener 每次更改它的父级时都会启动,对吗?

【问题讨论】:

  • 解决方案可能涉及DataSnapshot.getChildrenCount()。如果没有看到获取父节点的代码,很难提供帮助。
  • 我添加了我的代码。好吃吗?
  • 要检测是否没有孩子,您需要保留自己的计数器(在onChildAdded 中递增,在onChildRemoved 中递减),或者您需要额外的ValueEventListener地点。在后一种情况下,您可以使用snapshot.getChildrenCount() == 0!snapshot.exists() 来检测是否存在子节点。也可以在这里查看我的答案:stackoverflow.com/questions/39900082/…(适用于 JavaScript,但 Android SDK 的工作方式相同)。
  • 谢谢,真的很有帮助!

标签: android firebase firebase-realtime-database


【解决方案1】:

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

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) {

                }
            });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多