Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 选择日期超过最小或最大日期时,日期选择器崩溃。安卓5.1_Android_Datepicker - Fatal编程技术网

Android 选择日期超过最小或最大日期时,日期选择器崩溃。安卓5.1

Android 选择日期超过最小或最大日期时,日期选择器崩溃。安卓5.1,android,datepicker,Android,Datepicker,我有以下代码: 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

我有以下代码:

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();
我在安卓4.2上看到了一个有助于解决这类问题的方法,它似乎可以在以后的版本中得到解决。但我的情况并非如此

当我将月份滚动到(9月)时,它给出了下面的崩溃。我不确定,但我认为九月甚至不应该在那里

  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

需要初始化日期选择器才能设置最小或最大日期。我只是在它之前更改了dialog.show():\

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 ) );
dialog.show();

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

这一定是
DatePicker
类本身中的一个bug,我通过先设置
minDate
,然后设置
maxDate
(按该顺序)使其工作。如果我交换顺序或省略其中一个方法调用,我会得到一个奇怪的异常。

对于某些android版本,我遇到了同样的问题,解决方案是按如下方式设置MaxDate:

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());

重点是设置最大日期,最大毫秒表示给定的日期/天(在一天结束时)。设置minDate(在一天开始时)则相反。

targetDate的值是多少?我删除了这一行,同样的问题,现在我只设置为
new Date()
。这似乎无关紧要。