Android对话框中的非法参数异常

6
我正在使用这段代码来显示警告对话框……当我点击“确定”按钮时,它应该显示日期选择器。
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        return new TimePickerDialog(ListReminderActivity.this,
                mTimeSetListener, mHour, mMinute, false);
    case DATE_DIALOG_ID:
        return new DatePickerDialog(ListReminderActivity.this,
                mDateSetListener, mYear, mMonth, mDay);
    case DESCRIPTION_DIALOG_ID:
        return new AlertDialog.Builder(ListReminderActivity.this).setTitle(
                "Add Reminder").setView(description).setPositiveButton(
                R.string.add_alert_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int whichButton) {
                        ListReminderActivity.this
                                .dismissDialog(DESCRIPTION_DIALOG_ID);
                        ListReminderActivity.this
                                .removeDialog(DESCRIPTION_DIALOG_ID);
                        ListReminderActivity.this
                                .showDialog(DATE_DIALOG_ID);
                    }
                }).setNegativeButton(R.string.add_alert_cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int whichButton) {
                        ListReminderActivity.this
                                .dismissDialog(DESCRIPTION_DIALOG_ID);
                        ListReminderActivity.this
                                .removeDialog(DESCRIPTION_DIALOG_ID);
                    }
                }).create();
    }
    return null;
}

但问题在于.. 当我点击“确定”按钮时,出现了异常。

异常信息是...

    09-09 10:30:48.941: ERROR/AndroidRuntime(1189): FATAL EXCEPTION: main
09-09 10:30:48.941: ERROR/AndroidRuntime(1189): java.lang.IllegalArgumentException: current should be >= start and <= end
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.widget.NumberPicker.setCurrent(NumberPicker.java:288)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.widget.DatePicker.updateDaySpinner(DatePicker.java:364)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.widget.DatePicker.updateSpinners(DatePicker.java:350)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.widget.DatePicker.init(DatePicker.java:346)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:124)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:83)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at com.app.reminder.ListReminderActivity.onCreateDialog(ListReminderActivity.java:149)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.Activity.onCreateDialog(Activity.java:2472)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.Activity.createDialog(Activity.java:881)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.Activity.showDialog(Activity.java:2547)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.Activity.showDialog(Activity.java:2514)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at com.app.reminder.ListReminderActivity$3.onClick(ListReminderActivity.java:164)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.os.Looper.loop(Looper.java:123)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at android.app.ActivityThread.main(ActivityThread.java:4627)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at java.lang.reflect.Method.invokeNative(Native Method)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at java.lang.reflect.Method.invoke(Method.java:521)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-09 10:30:48.941: ERROR/AndroidRuntime(1189):     at dalvik.system.NativeStart.main(Native Method)

当取消并显示对话框时,我还遇到了另一个异常。 - Kandha
09-09 10:35:38.610: ERROR/AndroidRuntime(1311): java.lang.IllegalStateException: 指定的子项已经有父级。您必须先调用removeView()方法来移除该子项的父级。 09-09 10:35:38.610: ERROR/AndroidRuntime(1311): at android.view.ViewGroup.addViewInner(ViewGroup.java:1970) 09-09 10:35:38.610: ERROR/AndroidRuntime(1311): at android.view.ViewGroup.addView(ViewGroup.java:1865) 09-09 10:35:38.610: ERROR/AndroidRuntime(1311): at android.view.ViewGroup.addView(ViewGroup.java:1845) - Kandha
当创建对话框时,mYearmMonthmDay的值是多少?你有初始化它们吗? - st0le
是的,这是日期和时间选择器的值...我初始化了这些值。 - Kandha
1
那是一堆混乱的代码。你应该编写更易读的代码。 - Falmarri
这只是我的个人看法:这个错误并不会导致所有设备崩溃。某些设备似乎会吞下这个异常,而不是显示一个空白字段。 - rds
4个回答

9

您知道月份字段是从零开始的吗?确保月份的值不超过11!我收到了完全相同的消息,因为我使用了12作为月份,这就是出现异常的原因。


5

根据日志中显示的错误,您的mYear、mMonth或mDay值之一无效。


如果我没记错DatePicker的代码,最小和最大可能的年份取决于当前的样式?因此,一个主题可能会在某些日期崩溃,而其他主题则不会?另外,是否有计划支持没有年份的日期?我曾经通过将年份设置为0来解决这个问题,但由于最小/最大限制,这种方法已经不再起作用了。 - EboMike
我遇到了同样的问题 - 我的代码在设置年份时失败了 - 我手动将年份减少到2010年,这可以解决问题,但当然我实际上需要2011年(这是当前的年份):p。我在思考你的评论 - 你所说的“当前风格”是什么意思? - Ready4Android

0

将月份字段值设置为X的一个想法是将其设置为X%12(取模),这样您就可以确保不会超过授权值。 小时和分钟也是如此。 干杯。 查尔斯。


-2

你必须已经改变了mYear、mMonth和mDay的值。月份的范围是0-11。 确保你的值在这个范围内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接