用于日期选择器的java Android IllegalArgumentException
我用于活动的日期选择器在KitKat上崩溃,但在其他所有更新的操作系统上都能工作。这是我在旧设备上遇到的例外:
java.lang.IllegalArgumentException: fromDate: Mon Apr 10 07:59:25 EDT 2017 does not precede toDate: Mon Apr 10 07:59:25 EDT 2017
代码块堆栈跟踪指向:
private void showDatePicker(){
DatePickerDialog datePickerDialog = new DatePickerDialog(
getActivity(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
//this is where the crash happens
datePickerDialog.getDatePicker().setMinDate(new Date().getTime());
datePickerDialog.show();
}
请让我知道关于这个问题的信息是否足够。有办法吗
# 1 楼答案
要解决此问题,请在DatePickerDialog实例化之前为minDate创建一个时间戳:
此崩溃是由于API21之前版本的CalendarView和API21的
calendarViewMode == MODE_HOLO
中的错误造成的尽管
setMinDate
包含一个用注释突出显示的更正:签入
setSelectedDay
只比较mMinDate
和mSelectedDate
的日期准确性:mSelectedDate
和mMinDate
是指向同一天的点,因此mSelectedDate
将保持不变(即处于错误状态mSelectedDate < mMinDate
)然后控制流将运行到
mAdapter.init
,然后进入getWeeksSinceMinDate
。在该函数中,mMinDate
和mSelectedDate
的比较将以毫秒的精度进行:由于
mSelectedDate
在mMinDate
之前的几毫秒内初始化,崩溃将发生在一个较新的实现中,这段代码被重写,因此API21+缺少这个问题
# 2 楼答案
我通过延迟解决了这个问题:
}