Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase-从startDate到endDate获取数据_Android_Firebase_Firebase Realtime Database_Android Datepicker - Fatal编程技术网

Android Firebase-从startDate到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

我有一个活动,我需要选择两个日期,第一个日期和一个结束日期。我有两个TextView按钮,点击后会显示日期选择器。输入日期后,我需要计算从firstDate到endDate的总热量

但我得到的数据是所有日期的总热量

那我该怎么做呢

任何帮助都会很好,谢谢

这是我的密码:

        //************************* 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,你检查过了吗?注意到我会按照你的建议解决问题注意到我会按照你的建议解决问题