Rea*_*oid 1 android datepicker android-widget android-datepicker android-sdk-2.3
在我的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代码(因为从我知道它在updateSpinners方法中失败的strack跟踪)和那条线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
好吧,经过多一点小小的尝试后,我采取了一些我以前应该做的事情:我记录了它的价值
//As in my example dateTime was initialized with new Date()
dateTime.getYear()
日志显示的值是111!我知道这个方法已经被弃用了,并且有充分理由......我的错误是没有验证返回值2011 - 而是返回111 - 正如getYear()的文档所说,它返回自1900年以来的年份 - 如果我们添加111到1900我们最终得到了2011年...我被诱惑了一秒钟只是简单地将1900添加到返回值但是理智得到了更好的我并且我决定使用java类日历.
我最初误导的原因是,使用SimpleDateFormat格式化我的日期导致了正确的一年 - 我没有考虑SimpleDateFormat的内部工作,否则我可能有一个线索,我在我的Date对象的错误轨道上.
总结一下:DatePickerDialog没有问题 - 问题在于我传递给它的Date值.不过它本来不错,如果错误信息会提到确切的值而不是当前应该> = ...
| 归档时间: | 
 | 
| 查看次数: | 3030 次 | 
| 最近记录: |