使用TimePickerDialog时出现空指针异常

时间:2014-08-04 09:50:54

标签: android android-timepicker

我正在使用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. OnClick

    showDialog(END_TIME_PICKER_ID);
    
  2. protected void onPrepareDialog(int id,Dialog 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. protected Dialog onCreateDialog(int id)

     case END_TIME_PICKER_ID :
      return new TimePickerDialog(this, mEndTimeSetListener, endHourOfDay, endMinuteOfDay, false);
    
  4. 时间设置监听器
  5.  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);
     }
    
  6. 因此,当我运行上面的代码片段,并在设置timepicker之后,然后当我单击playbutton转到下一个活动时,它会使此应用程序崩溃。 然后去玩(新活动)

    当我点击后退键时,我收到另一个错误。

         java.lang.RuntimeException: Unable to start activity ComponentInfo
    

    当我点击“确定”时,它会再次从活动组开始,并在活动组中使用默认活动。

    我觉得所有这些问题都是由timepicker对话框引起的。 如果我不打开timepickerdialog(编辑时间),一切正常。

    如果我对timepickerdialog代码做错了,请告诉我。

2 个答案:

答案 0 :(得分: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然后是listener:

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

这是某种系统问题。如果你要在xml -i中创建timepicker,这个修复工作正常。相信这也是问题的根源。

答案 1 :(得分:-1)

当你使用变量或对象时没有初始化它或者在声明或初始化它之前尝试访问变量或对象时会出现空指针

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

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