2017-10-04 129 views
1

我使用Firebase作为数据库。我想知道我该如何计算父亲的孩子。我想要做的是,如果没有儿童想要显示文本视图,但是如果父亲下有孩子,我想显示所有孩子的回收视图。 每组保存在用户标识下。在用户标识下保存了用户打开的所有组。 我已经尝试了几件事,但仍然没有弄清楚如何做到这一点。 请看图片链接,希望你能理解。Firebasedatabase - 如何计算子节点

FirebaseDatabse Group node

编辑:

为计数儿童

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启动evey时间有一个变化,它的父母,对不对?

+1

该解决方案将可能涉及['DataSnapshot.getChildrenCount()'](https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#getChildrenCount ())。在没有看到代码获取父节点的情况下,除此之外还有点难。 –

+0

我加了我的代码。好吗? –

+0

要检测是否没有孩子,您需要保留自己的计数器(在'onChildAdded'中递增,在'onChildRemoved'中递减],否则您需要在同一位置额外添加一个'ValueEventListener'。在后一种情况下,可以使用'snapshot.getChildrenCount()== 0'或'!snapshot.exists()'来检测是否存在子节点。另请参阅我的答案在这里:https://stackoverflow.com/questions/39900082/can-i-determine-if-query-does-not-find-any-children-with-values-within-a-specifi/39900316# 39900316(对于JavaScript,但Android SDK的工作原理相同)。 –

回答

0

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

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

    // Getters and setters 
} 

现在将所有的组保存在用户标识下。

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

       } 
      }); 

} 
+0

我已添加我的代码。你认为它是一个很好的解决方案吗? –