2017-10-04 133 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

我已添加我的代碼。你認爲它是一個很好的解決方案嗎? –