我有一个Firebase数据库,如下图所示
我想创建一个函数public int getTotalInvites(int userId)
,该函数返回嵌套用户的邀请用户数
例如:getTotalInvites(1)
返回6,因为用户1邀请用户2(用户2邀请用户5和6),用户3和用户4(用户4邀请用户7),所以总数为6。
我想使函数递归,但是Firebase使用回调。
答案 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非常扁平,因此此处无需这样做。