gpt4 book ai didi

Android DatePickerDialog - 因 IllegalArgumentException 而失败

转载 作者:行者123 更新时间:2023-11-29 15:30:43 25 4
gpt4 key购买 nike

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

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 代码(因为从 strack 跟踪我知道它在 updateSpinners 方法中失败)并且在第 357 行(上面堆栈跟踪中的第四行)它调用 mYearPicker.setCurrent(mYear );这让我觉得我这一年一定有问题。我记录了我即将过去的那一年——正如预期的那样是 2011 年。所以我手动传递了 2010 年而不是工作 - DatePickerDialog 出现了 - 用 2010 年初始化(太糟糕了,我真的需要当前年份 - 2011 ;)......)。

我有点不知所措...我的模拟器上的日期 - 如上所述 - 正确设置为 22.08.2011 - 我的开发 PC 设置为相同的日期.. .

关于我哪里出错的任何线索/想法?为了使事情更容易,这里是我初始化 DatePickerDialog 的代码 fragment :

// 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

最佳答案

好吧,经过更多的调整之后,我采取了一些我应该早先做的事情:我记录了

的值
//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 的内部工作,否则我可能已经知道我在错误的轨道上我的日期对象。

总结一下:DatePickerDialog 没有问题 - 问题出在我传递给它的日期值上。然而,如果错误消息会提到确切的值而不是当前应该是 >= ...

关于Android DatePickerDialog - 因 IllegalArgumentException 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7142336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com