исключение нулевого указателя при использовании TimePickerDialog

Я работаю над деятельностью, которая использует timepickerdialog для установки времени. Но после настройки времени в диалоговом окне, а затем, когда я продолжаю, я получаю исключение

as:

java.lang.RuntimeException: Unable to pause activity
Caused by: java.lang.NullPointerException
at android.widget.TimePicker.updateInputState(TimePicker.java:995)
at android.widget.TimePicker.onSaveInstanceState(TimePicker.java:640)
at android.view.View.dispatchSaveInstanceState(View.java:13561)

Мой код использует:

  1. По щелчку

    showDialog(END_TIME_PICKER_ID);
    
  2. защищенная пустота onPrepareDialog (int id, диалоговое окно)

      case END_TIME_PICKER_ID :
            endHourOfDay = mEndCalendar.get(Calendar.HOUR_OF_DAY);
             endMinuteOfDay = mEndCalendar.get(Calendar.MINUTE);
    
            ((TimePickerDialog) dialog).updateTime(endHourOfDay, endMinuteOfDay);
            ((TimePickerDialog) dialog).show();
            break;
    
  3. защищенный диалог onCreateDialog (int id)

     case END_TIME_PICKER_ID :
      return new TimePickerDialog(this, mEndTimeSetListener, endHourOfDay, endMinuteOfDay, false);
    
  4. прослушиватель «Время установить»

     private TimePickerDialog.OnTimeSetListener mEndTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        endHourOfDay = hourOfDay;
        endMinuteOfDay = minute;
     GregorianCalendar endCalendar = (GregorianCalendar) mEndCalendar.clone();
        endCalendar.set(Calendar.DAY_OF_MONTH, mStartCalendar.get(Calendar.DAY_OF_MONTH));
        endCalendar.set(Calendar.HOUR_OF_DAY, endHourOfDay);
        endCalendar.set(Calendar.MINUTE, endMinuteOfDay);
        endCalendar.set(Calendar.SECOND, second);
     }
    

Поэтому, когда я запускаю приведенный выше фрагмент и после установки средства выбора времени, а затем, когда я нажимаю кнопку воспроизведения, чтобы перейти к следующему действию, это приводит к сбою этого приложения. Затем он идет и играет (новое занятие)

Когда я нажимаю клавишу «Назад», я получаю другую ошибку.

     java.lang.RuntimeException: Unable to start activity ComponentInfo

Когда я нажимаю «ОК», он снова запускается из группы действий с действием по умолчанию внутри группы действий.

Я чувствую, что все эти проблемы вызваны диалогом выбора времени. Если я не открываю диалоговое окно выбора времени (для редактирования времени), все работает нормально.

Пожалуйста, дайте мне знать, если я делаю что-то не так с кодом timepickerdialog.


person Sunil    schedule 04.08.2014    source источник
comment
вы определили активность в манифесте?   -  person mmlooloo    schedule 04.08.2014


Ответы (2)


Я столкнулся с той же проблемой на Android 4.4, на старой версии этого не было. В общем, я обнаружил, что эта проблема связана с timePicker.

Из Логкэт:

E/AndroidRuntime( 8671): java.lang.NullPointerException

E/AndroidRuntime( 8671):    at android.widget. (TimePicker.java:995)

E/AndroidRuntime( 8671):    at android.widget.TimePicker.onSaveInstanceState(TimePicker.java:640)

E/AndroidRuntime( 8671):    at android.view.View.dispatchSaveInstanceState(View.java:13570)

E/AndroidRuntime( 8671):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2813)

E/AndroidRuntime( 8671):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2819)

E/AndroidRuntime( 8671):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2819)

E/AndroidRuntime( 8671):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2819)

E/AndroidRuntime( 8671):    at android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2819)

E/AndroidRuntime( 8671):    at android.view.View.saveHierarchyState(View.java:13553)

E/AndroidRuntime( 8671):    at com.android.internal.policy.impl.PhoneWindow.saveHierarchyState(PhoneWindow.java:1875)

E/AndroidRuntime( 8671):    at android.app.Dialog.onSaveInstanceState(Dialog.java:408)

E/AndroidRuntime( 8671):    at android.app.TimePickerDialog.onSaveInstanceState(TimePickerDialog.java:238)

E/AndroidRuntime( 8671):    at android.app.Activity.saveManagedDialogs(Activity.java:1267)

E/AndroidRuntime( 8671):    at android.app.Activity.performSaveInstanceState(Activity.java:1185)

E/AndroidRuntime( 8671):    at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1241)

E/AndroidRuntime( 8671):    at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3331)

E/AndroidRuntime( 8671):    at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3390)

E/AndroidRuntime( 8671):    at android.app.ActivityThread.access$1100(ActivityThread.java:163)

E/AndroidRuntime( 8671):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279)

E/AndroidRuntime( 8671):    at android.os.Handler.dispatchMessage(Handler.java:102)

E/AndroidRuntime( 8671):    at android.os.Looper.loop(Looper.java:157)

E/AndroidRuntime( 8671):    at android.app.ActivityThread.main(ActivityThread.java:5335)

E/AndroidRuntime( 8671):    at java.lang.reflect.Method.invokeNative(Native Method)

E/AndroidRuntime( 8671):    at java.lang.reflect.Method.invoke(Method.java:515)

E/AndroidRuntime( 8671):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)

E/AndroidRuntime( 8671):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)

E/AndroidRuntime( 8671):    at dalvik.system.NativeStart.main(Native Method)

Я решил эту проблему, добавив

<TimePicker android:id="@+id/timePicker"     
     android:layout_width="wrap_content"    
     android:layout_height="wrap_content"    
     android:layout_gravity="center_horizontal"
android:descendantFocusability="blocksDescendants">  
 <requestFocus />  
</TimePicker>  

Я также установил timePicker в этом порядке: find, set24, затем listener:

timePicker = (TimePicker) viewContent.findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
timePicker.setOnTimeChangedListener(listener);

Это какая-то системная проблема. Это исправление работает, если вы создадите средство выбора времени в формате xml — я считаю, что это также является источником проблемы.

person Wojciech Karbowski    schedule 13.11.2014

Нулевой указатель возникает, когда вы используете переменную или объект без его инициализации или пытаетесь получить доступ к переменной или объекту перед его объявлением или инициализацией.

используйте logcat, чтобы получить ошибку после получения ошибки в logcat, перейдите к этой ошибке, дважды щелкнув по ней, после чего вы можете получить этот объект/переменную, которую вы используете, перед инициализацией/объявлением

вам нужно объявить/инициализировать этот объект до его фактического использования

person Android is everything for me    schedule 04.08.2014