首页 > 解决方案 > Android Firebase 数据库获得价值

问题描述

我想从 firebase 实时数据库中获取数据。

Firebase 数据库

我需要在所有日期中获取isPresentotDuration值。我的数据库参考是

mDatabase = FirebaseDatabase.getInstance().getReference().child("employee").child(emp_ID).child("attendance");

我需要访问otDuration以便我可以计算总数otDuration。不应在代码中提供日期值,我需要以某种方式获取所有otDuration值。

标签: javaandroidfirebaseandroid-studiofirebase-realtime-database

解决方案


如果您将侦听器附加到该引用,您将获得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值存储为字符串,但想对它们进行计算。我建议将它们存储为数值,这样您就不必从字符串到数字来回转换。

推荐阅读