Java Android Firebase数据库获取值
我想从firebase实时数据库获取数据 我需要获取所有日期中的isPresent和otDuration值。 我的数据库参考是Java Android Firebase数据库获取值,java,android,firebase,android-studio,firebase-realtime-database,Java,Android,Firebase,Android Studio,Firebase Realtime Database,我想从firebase实时数据库获取数据 我需要获取所有日期中的isPresent和otDuration值。 我的数据库参考是 mDatabase = FirebaseDatabase.getInstance().getReference().child("employee").child(emp_ID).child("attendance"); 我需要访问otDuration,以便计算总otDuration。 日期值不应在代码中提供,我需要以某种方式
mDatabase = FirebaseDatabase.getInstance().getReference().child("employee").child(emp_ID).child("attendance");
我需要访问otDuration
,以便计算总otDuration
。
日期值不应在代码中提供,我需要以某种方式获取所有的
otDuration
值。如果您将侦听器附加到该引用,您将获得一个DataSnapshot
,其中包含该位置下的所有数据。只要知道子节点/属性的名称,就可以使用child(“名称”)
访问它。只要不知道子节点的名称,就可以在该级别上循环使用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));
然后对这些值求和,循环如下:
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
- 对我来说,它通过使用软件包工作。
这是我的代码的一部分,适合您的用例,希望它能工作
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();
}
谢谢你的回答。但我的应用程序使用Java。我希望你的回答对那些与弗利特合作的人有用。