我正在从事使用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)
我的代码使用:
OnClick
showDialog(END_TIME_PICKER_ID);
onPrepareDialog(int id,对话框对话框)上的受保护的void
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;
受保护的对话框onCreateDialog(int id)
case END_TIME_PICKER_ID :
return new TimePickerDialog(this, mEndTimeSetListener, endHourOfDay, endMinuteOfDay, false);
按时间设置的侦听器
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(以编辑时间),则一切正常。
请告诉我我是否在timepicker对话框代码中做错了。
我在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中创建时间选择器,则此修复程序有效,我相信这也是问题的根源。
当您使用变量或对象而不对其进行初始化,或者您在声明或初始化变量或对象之前尝试访问它时,会发生空指针>
使用logcat来获取错误之后,通过双击它来获取错误,然后在初始化/声明它之前,可以获取正在使用的对象/变量
您需要在实际使用它之前声明/初始化该对象