Firebase - 获取从开始日期到结束日期的数据

Firebase - Get Data from startDate to endDate

我有一个 activity 需要 select 两个日期,第一个日期和一个结束日期。我有两个 TextView 按钮,单击它们会显示日期选择器。输入日期后,我需要计算从 firstDate 到 endDate 的 totalCalorie。

但我得到的数据是根据所有日期计算的总卡路里。

那我该怎么做呢?

如有帮助将非常感谢。

这是我的代码:

        //************************* 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();
            }
        });
    }

我的 Firebase:

您的日期格式无法 select 范围。为了 select 一个范围,确保字典顺序与时间顺序相匹配。换句话说:确保它的格式是年在月之前在日之前。

所以这些都可以:

"2019-11-17"
"2019/11/17"
"20191117"

使用这种格式的值,您可以查询日期范围内的子节点。例如,要获取 2019 年的所有节点,当值是您使用的最后一种格式时:

Query query = ref.orderByChild("dateRecord").startAt("20190101").endAt("20191231");
query.addListenerForSingleValueEvent(new ValueEventListener() {
  ...

另见:

您正在尝试使用字符串比较来 select 范围数据,但它不会为您提供正确的数据。通过字符串比较无法确定 18/11/2019 是否大于 19/11/2018。尝试以 TimeInMilisyyyyMMdd 格式存储 dateRecord。谢谢