Android Firebase-从startDate到endDate获取数据
我有一个活动,我需要选择两个日期,第一个日期和一个结束日期。我有两个TextView按钮,点击后会显示日期选择器。输入日期后,我需要计算从firstDate到endDate的总热量 但我得到的数据是所有日期的总热量 那我该怎么做呢 任何帮助都会很好,谢谢 这是我的密码:Android Firebase-从startDate到endDate获取数据,android,firebase,firebase-realtime-database,android-datepicker,Android,Firebase,Firebase Realtime Database,Android Datepicker,我有一个活动,我需要选择两个日期,第一个日期和一个结束日期。我有两个TextView按钮,点击后会显示日期选择器。输入日期后,我需要计算从firstDate到endDate的总热量 但我得到的数据是所有日期的总热量 那我该怎么做呢 任何帮助都会很好,谢谢 这是我的密码: //************************* FIRST DAY ***************************// firstDate.setOnClickListener(n
//************************* FIRST DAY ***************************//
firstDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(
UserHighlights.this,
android.R.style.Theme_Holo_Light_Dialog_MinWidth, mDateSetListener, year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
});
mDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
month = month + 1;
Log.d(TAG, "onDateSet: dd/mm/yyy: " + day + "/" + month + "/" + year);
String date1= day + "/" + month + "/" + year;
fDate.setText(date1);
dateDisplay_first.setText(date1);
from_Date = year+""+month+""+day;
onStart(from_Date);
updateView();
}
};
//************************* END DATE ***************************//
endDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(
UserHighlights.this,
android.R.style.Theme_Holo_Light_Dialog_MinWidth, mDateSetListener_1, year, month, day);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
}
});
mDateSetListener_1 = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
month = month + 1;
Log.d(TAG, "onDateSet: dd/mm/yyy: " + day + "/" + month + "/" + year);
String date2= day + "/" + month + "/" + year;
eDate.setText(date2);
dateDisplay_end.setText(date2);
end_Date = year+""+month+""+day;
onStart_1(end_Date);
updateView();
}
};
}
private void updateView() {
final String newFday = fDate.getText().toString().trim();
final String newEday = eDate.getText().toString().trim();
ref.orderByChild("dateRecord").startAt(newFday).endAt(newEday);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int count = 0;
for (DataSnapshot foodTypeSnapshot: dataSnapshot.getChildren()) {
String user = String.valueOf((foodTypeSnapshot.child("totalCalorie").getValue()));
int totalCount = Integer.parseInt(user);
count = count + totalCount;
totalCalorie.setText((count +" kcal"));
}
Log.d("TAG", count + "");
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
}
我的火力基地:
您的日期格式无法选择范围。要选择范围,请确保词典顺序与时间顺序匹配。换句话说:确保它是一种年在月在日之前的格式 因此,以下任何一项都可以:
"2019-11-17"
"2019/11/17"
"20191117"
使用此格式的值,可以查询日期范围内的子节点。例如,要获取2019年的所有节点(当值为您使用的最后一种格式时),请执行以下操作:
Query query = ref.orderByChild("dateRecord").startAt("20190101").endAt("20191231");
query.addListenerForSingleValueEvent(new ValueEventListener() {
...
另见:
2019年11月18日
大于2018年11月19日
。尝试以TimeInMilis
或yyyyymmdd
格式存储dateRecord
。谢谢@yunhyeongcharms,你检查过了吗?注意到我会按照你的建议解决问题注意到我会按照你的建议解决问题