android - 在firebase中获取嵌套数据
问题描述
我有一个如下图所示的 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)
您从 inside 调用的类似 a 的东西递归地下降树onDataChange
。但由于您的 JSON 非常平坦,因此这里不需要。
推荐阅读
- python-3.x - 如何获取 LIDAR 块的唯一“点源 ID”?
- c# - 在一个单元格中绘制两个矩形的两行。可以做到吗?
- javascript - TypeError: Router.use() 需要一个中间件函数,但得到一个对象 nodejs
- kubernetes - Istio:ACME 挑战的入口不起作用 (503)
- c# - 在 Asp.Net Core 应用程序的单例中使用 Scoped 服务
- python - sympy 中(线性位移)二阶项的系数
- c# - 如何使用异步等待延迟加载集合?
- python - 如何在 EGARCH 模型中解决除以零的问题?
- django - 尝试获取字段值时出现 AttributeError
- javascript - 在选择 remove_button 插件上显示确认模式