Android Firebase数据库获得价值

时间:2020-07-06 17:04:47

标签: java android firebase android-studio firebase-realtime-database

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

Firebase Databse

我需要获取所有日期内的 isPresent otDuration 值。 我的数据库参考是

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对我来说,它是通过使用'cloud firestore'软件包来工作的。 这是我的代码的一部分,适合您的用例,希望它能起作用

import 'package:cloud_firestore/cloud_firestore.dart';

DocumentReference employeeAttendance = Firestore.instance.collection('employee')
                                               .document(emp_ID)
                                               .collection('attendance')
                                               .document('2020-7-5');

employeeAttendance.get().then((documentSnapshot) {
    String isPresent = documentSnapshot.data['isPresent'].toString();
}