1

我正在从事使用 timepickerdialog 设置时间的活动。但是在设置对话框的时间之后,然后当我继续时,我得到了异常

作为:

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. protected void onPrepareDialog(int id, Dialog 对话框)

      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 代码做错了什么,请告诉我。

4

2 回答 2

0

我在 android 4.4 上遇到了同样的问题,在旧版本上它没有发生。通常我发现这个问题与timePicker有关。

来自 Logcat:

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 查找,set24 然后侦听器:

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

这是某种系统问题。如果您将在 xml 中创建 timepicker,则此修复程序有效 - 我相信这也是问题的根源。

于 2014-11-13T13:39:57.673 回答
-1

当您使用变量或对象而不对其进行初始化或您在声明或初始化之前尝试访问变量或对象时会出现空指针

在 logcat 中出现错误后使用 logcat 得到错误 通过双击它来转到该错误,然后你可以在初始化/声明它之前获取你正在使用的对象/变量

您需要在实际使用该对象之前声明/初始化该对象

于 2014-08-04T10:07:09.853 回答