java - Android Firebase 数据库获得价值
问题描述
我想从 firebase 实时数据库中获取数据。
我需要在所有日期中获取isPresent和otDuration值。我的数据库参考是
mDatabase = FirebaseDatabase.getInstance().getReference().child("employee").child(emp_ID).child("attendance");
我需要访问otDuration
以便我可以计算总数otDuration
。不应在代码中提供日期值,我需要以某种方式获取所有otDuration
值。
解决方案
如果您将侦听器附加到该引用,您将获得DataSnapshot
该位置下的所有数据。只要您知道子节点/属性的名称,就可以使用child("name")
. 每当您不知道子节点的名称时,您都可以DataSnapshot.getChildren()
在该级别上循环。
所以像:
mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dateSnapshot: dataSnapshot.getChildren()) {
Log.i("Firebase", dateSnapshot.getKey()); // "2020-7-5", "2020-7-6"
Log.i("Firebase", dateSnapshot.child("otDuration").getValue(String.class)); // "0", "1.5"
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
然后对这些值求和,循环将类似于:
double sum = 0.0;
for (DataSnapshot dateSnapshot: dataSnapshot.getChildren()) {
String value = dateSnapshot.child("otDuration").getValue(String.class));
sum += Double.parseDouble(value);
}
Log.i("Sum", String.valueOf(sum));
有几点需要考虑:
- 我强烈建议您填充日期中的值,使它们变为“2020-07-05”和“2020-07-06”。这将使潜在的未来查询更有可能。如果您想这样做,我建议您研究 Java 的
DateFormatter
. - 您将
otDuration
值存储为字符串,但想对它们进行计算。我建议将它们存储为数值,这样您就不必从字符串到数字来回转换。
推荐阅读
- python - Selenium python 插件和权限问题
- python - 从嵌入式 Microsoft Power BI 表和图形中抓取网页
- swift - 检测鼠标悬停在 Mac 应用程序中的视图上时
- javascript - 如何使用 JS 为文本输入动态添加图标?
- r - Using group_by() and prod() for not all rows in each group
- html - Django 文本字段模型上的 HTML 格式
- arrays - 在 React 中编辑对象数组中的对象
- angular - 是否可以像在 p-table 中使用lazyLoading 一样在 p-table 中使用加载微调器
- postgresql - Postgres 二维数组动态长度
- html - 如何向 CSS 幻灯片添加放大功能?