选择日期超过最小或最大日期时,DatePicker会崩溃。 Android 5.1 [英] DatePicker crashes when select date beyond min or max date. Android 5.1

查看:149
本文介绍了选择日期超过最小或最大日期时,DatePicker会崩溃。 Android 5.1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个代码:

  public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth)
{
Log.v(DateRangePicker,更改日期);
}

...

日历日历calender = Calendar.getInstance();
calender.setTime(new Date());
DatePickerDialog dialog = new DatePickerDialog(
getActivity(),
this,
calender.get(Calendar.YEAR),calender.get(Calendar.MONTH),
calender.get(Calendar.DAY_OF_MONTH));

DatePicker选择器= dialog.getDatePicker();
picker.setMaxDate(System.currentTimeMillis());
dialog.show();

我看到一个



当我滚动月份到(9月份) )它给下面的崩溃。我不知道肯定,但我认为9月不应该在那里。

 致命例外:main 
进程:com.hizzo.counter,PID:23871
java.lang.IllegalArgumentException:时间不在Mon Jan 01 00:00:00 AMT 1900和Wed Aug 26 11:49:46 AMT 2015
at android.widget.CalendarViewLegacyDelegate.goTo(CalendarViewLegacyDelegate.java:775)
在android.widget.CalendarViewLegacyDelegate.setDate(CalendarViewLegacyDelegate.java:592)
在android.widget.CalendarView.setDate(CalendarView.java: 495)
在android.widget.DatePicker $ DatePickerSpinnerDelegate.updateCalendarView(DatePicker.java:1069)
在android.widget.DatePicker $ DatePickerSpinnerDelegate.access $ 800(DatePicker.java:536)
在android.widget.DatePicker $ DatePickerSpinnerDelegate $ 1.onValueChange(DatePicker.java:642)
在android.widget.NumberPicker.notifyChange(NumberPicker.java:1888)
在android.widget.Numb erPicker.setValueInternal(NumberPicker.java:1674)
在android.widget.NumberPicker.scrollBy(NumberPicker.java:1137)
在android.widget.NumberPicker.computeScroll(NumberPicker.java:1091)
at android.view.View.updateDisplayListIfDirty(View.java:14172)
在android.view.View.getDisplayList(View.java:14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup .java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
在android。 view.View.getDisplayList(View.java:14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java:14207)
在android.view。 ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
at android.view.View.getDisplayList(View.java:14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup .java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java:14207)
在android。 view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java:14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
a t android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view.View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java :14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
在android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
在android.view。 View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java:14207)
在android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
at android.view.View.updateDisplayListIfDirty(View.java:14145)
at android.view.View.getDisplayList(View .java:14207)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
at android.view.View.updateDisplayListIfDirty(View.java:14145)
在android.view.View.getDisplayList(View.java:14207)
在android.view.ThreadedRenderer.updateViewTreeDisplayList( ThreadedRenderer.java:273)
在android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
在android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
在android .view.ViewRootImpl.draw(ViewRootImpl.java:2560)
在android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2382)
在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2012 )
在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5990)
在android.view。编排人$ call


解决方案

我有一些同样的问题的android版本,solu如下设置MaxDate:

 日历cal1 = Calendar.getInstance(); 
cal1.set(Calendar.YEAR,maxYear);
cal1.set(Calendar.HOUR_OF_DAY,23);
cal1.set(Calendar.MINUTE,59);
cal1.set(Calendar.SECOND,59);
cal1.set(Calendar.MILLISECOND,999);
datePicker.setMaxDate(cal1.getTimeInMillis());要点是设置最大日期,最大毫秒表示给定的日期/日期(最后一个月)那天)。设置minDate(在一天的开始时间)相反,


I have this code:

public void onDateSet( DatePicker view, int year, int monthOfYear, int dayOfMonth )
{
    Log.v( "DateRangePicker", "Date CHANGED" );
}

...

Calendar calender = Calendar.getInstance();
calender.setTime( new Date() );
DatePickerDialog dialog = new DatePickerDialog( 
        getActivity(), 
        this,
        calender.get( Calendar.YEAR ), calender.get( Calendar.MONTH ),
        calender.get( Calendar.DAY_OF_MONTH ) );

DatePicker picker = dialog.getDatePicker();
picker.setMaxDate( System.currentTimeMillis() );
dialog.show();

I saw a post helping this kind of problem for android 4.2, it seems to be solved on further versions. But not in my case.

When I scroll the month to (september) it gives the crash below. I don't know for sure but, I think september should not be even there.

  FATAL EXCEPTION: main
  Process: com.hizzo.counter, PID: 23871
  java.lang.IllegalArgumentException: Time not between Mon Jan 01 00:00:00 AMT 1900 and Wed Aug 26 11:49:46 AMT 2015
        at android.widget.CalendarViewLegacyDelegate.goTo(CalendarViewLegacyDelegate.java:775)
        at android.widget.CalendarViewLegacyDelegate.setDate(CalendarViewLegacyDelegate.java:592)
        at android.widget.CalendarView.setDate(CalendarView.java:495)
        at android.widget.DatePicker$DatePickerSpinnerDelegate.updateCalendarView(DatePicker.java:1069)
        at android.widget.DatePicker$DatePickerSpinnerDelegate.access$800(DatePicker.java:536)
        at android.widget.DatePicker$DatePickerSpinnerDelegate$1.onValueChange(DatePicker.java:642)
        at android.widget.NumberPicker.notifyChange(NumberPicker.java:1888)
        at android.widget.NumberPicker.setValueInternal(NumberPicker.java:1674)
        at android.widget.NumberPicker.scrollBy(NumberPicker.java:1137)
        at android.widget.NumberPicker.computeScroll(NumberPicker.java:1091)
        at android.view.View.updateDisplayListIfDirty(View.java:14172)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3391)
        at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3370)
        at android.view.View.updateDisplayListIfDirty(View.java:14145)
        at android.view.View.getDisplayList(View.java:14207)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2560)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2382)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2012)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
        at android.view.Choreographer$Call

解决方案

I was having the same problem for some of the android versions, the solution was to set MaxDate as follows:

Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.YEAR, maxYear);
cal1.set(Calendar.HOUR_OF_DAY, 23);
cal1.set(Calendar.MINUTE, 59);
cal1.set(Calendar.SECOND, 59);
cal1.set(Calendar.MILLISECOND,999);
datePicker.setMaxDate(cal1.getTimeInMillis());

The point was to set max date with maximum millisecond representing the given date/day(at the end of the day). It would be the opposite for setting minDate (at the begining of the day)

这篇关于选择日期超过最小或最大日期时,DatePicker会崩溃。 Android 5.1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆