在Firebase中获取嵌套数据

时间:2019-11-14 21:38:07

标签: android firebase-realtime-database

我有一个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使用回调。

1 个答案:

答案 0 :(得分:0)

由于邀请计数所需的所有数据都存储在单个节点下,因此您可以使用单个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)内调用的onDataChange之类的树递归地降级。但是,由于您的JSON非常扁平,因此此处无需这样做。