在使用过程中,如果设置了最大值。然后当选择日期,超过最大值时会崩溃。
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: xxxxxx, PID: 7638java.lang.IllegalArgumentException: Time not between Wed May 17 09:39:25 GMT+08:00 2017 and Thu Aug 17 23:59:59 GMT+08:00 2017
at android.widget.CalendarView.goTo(CalendarView.java:1105)
at android.widget.CalendarView.setDate(CalendarView.java:935)
at android.widget.DatePicker.updateCalendarView(DatePicker.java:693)
at android.widget.DatePicker.access$800(DatePicker.java:75)
at android.widget.DatePicker$1.onValueChange(DatePicker.java:208)
at android.widget.NumberPicker.notifyChange(NumberPicker.java:1831)
at android.widget.NumberPicker.setValueInternal(NumberPicker.java:1617)
at android.widget.NumberPicker.changeValueByOne(NumberPicker.java:1645)
at android.widget.NumberPicker.access$200(NumberPicker.java:94)
at android.widget.NumberPicker$1.onClick(NumberPicker.java:640)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18439)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5069)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
查看源码,发现是一个逻辑性错误,在设置最大值时,需要把毫秒设置一下可以解决。示例代码如下:
private void init() { Calendar minCal = Calendar.getInstance(); minCal.add(Calendar.MONTH, -3); minCal.set(Calendar.HOUR_OF_DAY, 0); minCal.set(Calendar.MINUTE, 0); minCal.set(Calendar.SECOND, 0); minCal.set(Calendar.MILLISECOND, 0); Calendar maxCal = Calendar.getInstance(); maxCal.set(Calendar.HOUR_OF_DAY, 23); maxCal.set(Calendar.MINUTE, 59); maxCal.set(Calendar.SECOND, 59); maxCal.set(Calendar.MILLISECOND, 999); DatePicker datePicker = getDatePicker(); datePicker.setMinDate(minCal.getTimeInMillis()); datePicker.setMaxDate(maxCal.getTimeInMillis()); }
最大值和最小值一定要修改时分秒。