在我的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)
所以我检查了source Code for DatePicker(对于API lvl 2.3.3)并且我检查了DatePicker代码(因为我知道它在updateSpinners方法中失败的strack跟踪)并且在那条线357(第四行)在上面的堆栈跟踪中)它调用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();
}
});
提前致谢&amp;最好的祝福, Ready4Android
答案 0 :(得分:5)
好吧,经过多一点小事,我采取了一些我应该做的事情:我记录了
的价值//As in my example dateTime was initialized with new Date()
dateTime.getYear()
日志显示的值 111 !我知道这个方法已经被弃用了,并且有充分理由......我的错误是没有验证返回值2011 - 而是返回111 - 正如getYear()的文档所说,它返回自1900年以来的年份 - 如果我们添加111到1900我们最终得到了2011年...我被诱惑了一秒钟只是简单地将1900添加到返回值但是理智变得更好我并且我决定使用java类日历而不是
我最初误导的原因是,使用SimpleDateFormat格式化我的日期导致了正确的一年 - 我没有考虑SimpleDateFormat的内部工作,否则我可能有一个线索,我在错误的轨道上我的日期对象。
总结一下:DatePickerDialog没有问题 - 问题在于我传递给它的日期值。然而,如果错误消息提到的确切值而不是当前应该是&gt; = ...
那就不错了。答案 1 :(得分:0)
我认为它无法编译,请dateTime
字段final
。另外,您是否已声明dateSetListener
?