Ошибка функции простого форматирования даты

#android #simpledateformat

#Android #simpledateformat

Вопрос:

Я получаю сообщение об ошибке при использовании функции SimpleDateFormatter.parse(). Я заставляю пользователя вводить дату и время с помощью DatePicker и TimePicker соответственно, и я собираю информацию из обоих средств выбора и пытаюсь создать объект Date, чтобы я мог сравнить его с другим объектом date (системной датой).

Но когда я пытаюсь проанализировать дату, чтобы сформировать формат даты, я получаю ошибку. Ошибка формы Logcat

Фрагмент кода, вызывающий ошибку, является

  btn.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
         int day =  dpicker.getDayOfMonth();
         int month = dpicker.getMonth()   1;

         if (month < 10)
         {
             monthS = "0"   month;
         }
         else
         {
             monthS = String.valueOf(month);
         }
         int year = dpicker.getYear();

         int minutes = tpicker.getCurrentMinute();
         int hours = tpicker.getCurrentHour();
         if (hours < 10)
         {
             hoursS = "0"   hours;
         }
         else
         {
             hoursS = String.valueOf(hours);
         }


          date = year   "-"   monthS   "-"   day   " "   hoursS   ":"    minutes  ; 

         tview.setText("Date and Time are"   date) ;


        }
    });

   SimpleDateFormat sdf =   new SimpleDateFormat("yyyy-MM-dd hh:MM");

   try {
     newDate = sdf.parse(date);

} catch (java.text.ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
tview2.setText(newDate.toString());
  

Я был бы признателен за любую помощь по этой ошибке.

Спасибо, Sid

Комментарии:

1. Вы получаете исключение с нулевым указателем. кажется, вы не инициализировали объект.

2. Я ценю вашу помощь, Танмэй, не могли бы вы, пожалуйста, объяснить, как можно инициализировать объект ‘sdf’. Я новичок в Android. Спасибо.

3. в этой строке, newDate = sdf.parse(date); похоже date , неверный формат …. Распечатайте date в консоли и посмотрите результат.

4. просто распечатайте свою переменную date и проверьте, регистрируется ее поступление или нет?

Ответ №1:

Вы выполняете синтаксический анализ date вне прослушивателя onClick, поэтому, возможно, в это время переменная date не инициализирована. Я думаю, вам следует переместить цикл try / catch внутри listener.

Комментарии:

1. Спасибо за вашу помощь, я действительно смог создать объект date из year, month, day, hours и time, указанных в диалоговом окне выбора даты, это было проще, поскольку я обошел необходимость создания строки и преобразования строки tge в дату. Спасибо

Ответ №2:

Проблема в том, что date равно нулю. Код внутри вашего OnClickListener не будет выполняться до тех пор, пока не будет нажата кнопка.

Комментарии:

1. Спасибо за вашу помощь, я действительно смог создать объект date из year, month, day, hours и time, указанных в диалоговом окне выбора даты, это было проще, поскольку я обошел необходимость создания строки и преобразования строки tge в дату. Спасибо

Ответ №3:

Это не sdf объект, который не инициализирован, это, вероятно, data строка, которая по-прежнему равна null (хотя мы не можем быть уверены, пока не увидим код перед ней). Вы пытаетесь выполнить синтаксический анализ date , но из того, что вы опубликовали, вы только изменяете / присваиваете ему значение в OnClickListener , которое не вызывается до щелчка.

Итак, что вы в основном делаете, это:

  1. объявляем строку date.
  2. установите onclicklistener.
  3. используйте строку date перед ее инициализацией.

Исправьте это, установив значение по умолчанию на date или также поместите синтаксический анализ в прослушиватель (независимо от того, что соответствует правильной логике, которая вам нужна)

Комментарии:

1.Спасибо за вашу помощь, я действительно смог создать объект date из year, month, day, hours и time, указанных в диалоговом окне выбора даты, это было проще, поскольку я обошел необходимость создания строки и преобразования строки tge в дату. Спасибо