java.text.ParseException: непарсируемая дата: ошибка "" (со смещением 0) для timepickerdialog

Привет, я впервые разрабатываю простое приложение для Android. Мне нужно проверить время начала и окончания, а это означает, что время окончания не должно быть меньше или равно времени начала. Я использую EditText, чтобы открыть диалог выбора времени. Я пробовал этот код, но он не работает, с точки зрения получения ошибки выше в строке ниже

Date endTimeDate = format.parse(inputEndTime.getText().toString());

Это полный код поля OnClickListener for EditText, чтобы вызвать диалоговое окно выбора времени. Я даже пытался изменить утверждения в if-else, но у меня это тоже не работает. Любой может помочь мне в этом. Действительно большое спасибо!

inputEndTime.OnClickListener code:

inputEndTime.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v)
        {
            int hour = myTime.get(Calendar.HOUR_OF_DAY);
            int min = myTime.get(Calendar.MINUTE);
            TimePickerDialog myEndTimePickerDialog = new TimePickerDialog(ViewDocActivity.this,
                    new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay, int minute)
                        {
                            SimpleDateFormat format = new SimpleDateFormat("HH:mm");
                            try
                            {
                                Date startTimeDate = format.parse(inputTime.getText().toString());
                                Date endTimeDate = format.parse(inputEndTime.getText().toString());

                                if (startTimeDate.compareTo(endTimeDate) <= 0)
                                {
                                    Context timeContext = getApplicationContext();
                                    CharSequence text = "Please enter the correct end time";
                                    int duration = Toast.LENGTH_LONG;

                                    Toast toast = Toast.makeText(timeContext, text, duration);
                                    toast.show();
                                }
                                else
                                {
                                    inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));

                                }
                            }
                            catch(ParseException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }, hour, min, true);

            myEndTimePickerDialog.setTitle("Select Time");
            myEndTimePickerDialog.show();
        }
    });

2 ответа

Решение

Причина вашей ошибки в том, что вы пытаетесь проанализировать время из вашего EditText (inputEndTime), но это пустое время, когда вы делаете format.parse(),

При настройке у вас есть EditText и TimePickerDialog. Теперь вы реализуете метод TimePickerDialog.OnTimeSetListener#onTimeSet(). Здесь вы получаете время, выбранное пользователем в диалоге через hourOfDay а также minute параметры метода. На данный момент у вас есть время, но оно еще не записано в самом поле EditText.

Поэтому самое простое решение для работы вашего кода - установить это время в поле EditText, прежде чем делать что-либо еще. Для этого добавьте следующую строку в качестве первой строки onTimeSet() метод:

inputEndTime.setText(String.format("%02d:%02d", hourOfDay, minute));

Это устанавливает выбранное время как текст в поле EditText в формате, который затем может быть проанализирован с format.parse(...) позже.

Я думаю, что вы должны отформатировать строку перед форматированием в Date Возможно trim().

Date startTimeDate = format.parse(inputTime.getText().toString().trim());
Date endTimeDate = format.parse(inputEndTime.getText().toString().trim());
Другие вопросы по тегам