我想从Firebase实时数据库中获取数据。
我需要获取所有日期内的 isPresent 和 otDuration 值。 我的数据库参考是
mDatabase = FirebaseDatabase.getInstance().getReference().child("employee").child(emp_ID).child("attendance");
我需要访问otDuration
,以便可以计算总otDuration
。
日期值不应在代码中提供,我需要以某种方式获取所有otDuration
值。
答案 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));
要考虑的几件事:
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();
}