Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在firebase中获取嵌套数据_Android_Firebase Realtime Database - Fatal编程技术网

Android 在firebase中获取嵌套数据

Android 在firebase中获取嵌套数据,android,firebase-realtime-database,Android,Firebase Realtime Database,我有一个firebase数据库,如下图所示 我想创建一个函数public int-getTotalInvites(int-userId),它返回嵌套用户的受邀请用户数 例如:getTotalInvites(1)返回6,因为用户1邀请用户2(用户2邀请用户5和6)、3和用户4(用户4邀请用户7),所以总数是6 我想使函数递归,但Firebase使用回调。由于邀请计数所需的所有数据都存储在单个节点下,因此可以使用单个ValueEventListener执行整个计算 大概是这样的: Database

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

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

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


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

由于邀请计数所需的所有数据都存储在单个节点下,因此可以使用单个
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非常简单,这里不需要这样做。

我不确定自己是否理解,但怀疑添加更多的单词是否有助于澄清。你能编辑你的问题来显示你已经尝试过的代码吗?我没有代码,我想做这个函数,但我不知道