android - 从firebase实时数据库中单个子项下的多个推送ID中检索数据
问题描述
我是 android studio 和编程新手,目前正在尝试制作我的第一个应用程序。在firebase RTDB中,我在一个孩子下有多个推送ID,随着用户按下某些按钮,它们的数量会不断增加,并且它们都只存储一个整数。我想从子项下的所有这些推送 ID(或键,我真的不知道它们实际上叫什么)中检索数据,然后将整数相加并在 a 中显示结果,textView
并在每次新字段时执行此操作被添加。我怎样才能做到这一点?到目前为止,我只知道如何像这样正常地向子子孩子发送和接收数据,但我以前从未使用过推送 ID 或密钥:
String recieve = datasnapshot.child("Child").child("subchild").getText().toString();
String send = "send";
databaseReferenc.child("Child").child("sunchile").setValue(send);
firebase中的数据树如下:
解决方案
假设它Australia
是您的 Firebase 实时数据库根的直接子节点,要对所有这些值求和,请使用以下代码行:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference australiaRef = rootRef.child("Australia");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int total = 0;
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String value = Integer.parseInt(ds.getValue(String.class));
total += value;
}
Log.d("TAG", "total: " + total);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
};
australiaRef.addListenerForSingleValueEvent(valueEventListener);
还有一件事。因为您要存储数字,所以最好将它们存储为长值而不是字符串值。
推荐阅读
- java - 如何更新/订购“Android.mk”文件?
- php - imap_open():无法在核心 php 中打开流
- java - 更改为横向模式应用程序无法正常工作
- javascript - ES6:过滤数组以不冻结 UI
- node.js - 我在子文档数组中使用 mongoose(MEAN 堆栈)保存了一个空数组
- linux - 带有 xargs 和命令行参数的 shell 脚本
- linux - linux下是否可以监控所有进程对文件系统的所有写访问
- r - R:将多个变量合并为一个(一些重叠)
- sql - 来自多个表的单列 SQL-SERVER 2014 Expr
- sql - 汇总移动日期范围内的记录,日期距离