Firebasedatabase - 如何计算子节点
Posted
技术标签:
【中文标题】Firebasedatabase - 如何计算子节点【英文标题】:Firebasedatabase - how to count child node 【发布时间】: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()
来检测是否存在子节点。也可以在这里查看我的答案:***.com/questions/39900082/…(适用于 javascript,但 android SDK 的工作方式相同)。
谢谢,真的很有帮助!
【参考方案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)
);
【讨论】:
以上是关于Firebasedatabase - 如何计算子节点的主要内容,如果未能解决你的问题,请参考以下文章