首页 > 解决方案 > 在firebase中获取嵌套数据

问题描述

我有一个如下图所示的 firebase 数据库

https://i.stack.imgur.com/epEaO.png

我想创建一个public int getTotalInvites(int userId)返回嵌套用户的受邀用户计数的函数

例如:getTotalInvites(1)返回 6,因为用户 1 邀请用户 2(用户 2 邀请用户 5 和 6),3 和用户 4(用户 4 邀请用户 7),所以总数为 6。

我想让函数递归,但 Firebase 使用回调。

标签: androidfirebase-realtime-database

解决方案


由于邀请计数所需的所有数据都存储在单个节点下,因此您可以使用单个ValueEventListener.

像这样的东西:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        long count = 0;
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            count = count + userSnapshot.child("invitedUsers").getChildrenCount();
        }
        System.out.println(count);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

上面的代码处理一个用户列表,每个用户都有一个inviteCount. 如果不知何故有一棵用户树,您可能需要使用countUsers(DataSnapshot snapshot)您从 inside 调用的类似 a 的东西递归地下降树onDataChange。但由于您的 JSON 非常平坦,因此这里不需要。


推荐阅读