【问题标题】:null pointer exception when using TimePickerDialog使用 TimePickerDialog 时出现空指针异常
【发布时间】:2014-09-26 18:23:03
【问题描述】:

我正在处理使用 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 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);
     }
    

因此,当我运行上面的 sn-p 并设置时间选择器之后,然后当我单击播放按钮转到下一个活动时,它会导致此应用程序崩溃。 然后它开始播放(新活动)

当我点击返回键时,我得到另一个错误。

     java.lang.RuntimeException: Unable to start activity ComponentInfo

当我点击确定时,它再次从活动组开始,活动组内的默认活动。

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

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

【问题讨论】:

  • 您是否在清单中定义了活动?

标签: android android-timepicker


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我在 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 中创建时间选择器,则此修复程序有效 - 我相信这也是问题的根源。

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多