1

我的 Android 模拟器上发生了一些奇怪的事情(代码和模拟器在 API 级别 10 上运行 - 是 Android 2.3.3):我的 emu 上的当前日期是 22.08.2011 - 如果我使用这些设置初始化 DatePickerDialog(使用新的值Date() - 用当前日期/时间初始化 Date ,然后失败,但有以下例外:

08-22 02:14:23.731: ERROR/AndroidRuntime(3038): FATAL EXCEPTION: main
08-22 02:14:23.731: ERROR/AndroidRuntime(3038): java.lang.IllegalArgumentException: current should be >= start and <= end
08-22 02:14:23.731: ERROR/AndroidRuntime(3038):     at android.widget.NumberPicker.setCurrent(NumberPicker.java:288)
08-22 02:14:23.731: ERROR/AndroidRuntime(3038):     at android.widget.DatePicker.updateSpinners(DatePicker.java:357)
08-22 02:14:23.731: ERROR/AndroidRuntime(3038):     at android.widget.DatePicker.init(DatePicker.java:352)
08-22 02:14:23.731: ERROR/AndroidRuntime(3038):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:127)
08-22 02:14:23.731: ERROR/AndroidRuntime(3038):     at android.app.DatePickerDialog.<init>(DatePickerDialog.java:86)

所以我检查了DatePicker 的源代码(对于 API lvl 2.3.3),我检查了 DatePicker 代码(因为从 strack 跟踪我知道它在 updateSpinners 方法中失败)和第 357 行(上面堆栈中的第四行trace) 它调用 mYearPicker.setCurrent(mYear); 这让我觉得我这一年一定有问题。我记录了我要过的那一年——正如预期的那样,它是 2011 年。所以我手动传递了 2010 年而不是工作 - DatePickerDialog 出现了 - 用 2010 年初始化(太糟糕了,我真的需要当前年份 - 2011 ;) ...)。

我有点不知道这是什么原因......我的模拟器上的日期 - 如上所述 - 正确设置为 22.08.2011 - 我的开发 PC 设置为相同的日期......

关于我哪里出错的任何线索/想法?为了让事情变得更简单,这里是我初始化 DatePickerDialog 的代码片段:

// Initializes a Date object with the current date and time for clarification:
// it is actually declared as a private member variable of my class - 
// just included it here so you guys know of which type dateTime ist

 Date dateTime = new Date();
 Button dateButton = new Button(context);
 dateButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// dateSetListener is declared as well - but its code has no influence on the failure of 
// the DatePickerDialog - to ensure this I commented all code in the dateSetListener's 
// onDateSet method 

                Dialog dateDialog = new DatePickerDialog(v.getContext(), dateSetListener, dateTime.getYear(),
                        dateTime.getMonth(), dateTime.getDay());
                dateDialog.show();
            }
        });

在此先感谢和最好的问候,Ready4Android

4

2 回答 2

5

好吧,经过一番摆弄之后,我采取了一些我以前应该做的事情:我记录了

//As in my example dateTime was initialized with new Date()
dateTime.getYear()

日志显示的值为111!我知道这种方法已被弃用并且显然是有充分理由的......我的错误是没有验证返回值 2011 - 而是返回 111 - 正如 getYear() 的文档所说,它返回自 1900 年以来的年份 - 如果我们将 111 添加到 1900,我们最终得到 2011 ... 我想简单地将 1900 添加到返回值,但理智让我变得更好,我决定改用 java 类Calendar

起初我被误导的原因是,使用 SimpleDateFormat 格式化我的日期会导致正确的年份 - 我没有考虑 SimpleDateFormat 的内部工作,否则我可能会知道我的 Date 对象走错了轨道.

总结一下: DatePickerDialog 没有问题 - 问题在于我传递给它的 Date 值。但是,如果错误消息提到确切的值而不是 current 应该是 >= ...

于 2011-08-27T01:46:45.580 回答
0

我认为它不会编译, make dateTimefield final。还有,你声明了dateSetListener吗?

于 2011-08-22T02:18:50.567 回答