Android DatePickerDialog - происходит сбой с IllegalArgumentException - PullRequest
1 голос
/ 22 августа 2011

Что-то странное происходит в моем эмуляторе Android (код и эмулятор работают на API Level 10 - Android 2.3.3): текущая дата в моем эму - 22.08.2011 - если я инициализирую DatePickerDialog с этими настройками (используя значения из новой даты () - которая инициализирует дату с текущей датой / временем), затем происходит сбой со следующим исключением:

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), и на этом строка 357 (четвертая строка в приведенной выше трассировке стека) вызывает mYearPicker.setCurrent (mYear); что заставило меня думать, что что-то не так с моим годом. Я зарегистрировал год, который я прохожу - это 2011 год, как и ожидалось. Поэтому я вместо этого вручную прошел 2010 год, который сработал - появился DatePickerDialog - инициализированный с 2010 годом (очень жаль, что мне действительно нужен текущий год - 2011;) ...).

Я немного растерялся из-за причины этого ... Дата на моем эмуляторе - как упоминалось выше - правильно установлена ​​на 22.08.2011 - на моем компьютере разработчика установлена ​​та же дата .. .

Какие-нибудь подсказки / идеи относительно того, где я иду не так? Чтобы упростить задачу, вот фрагмент кода, в котором я инициализирую 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

Ответы [ 2 ]

5 голосов
/ 27 августа 2011

Ладно, после еще большего беспокойства, я прибег к чему-то, что я должен был сделать ПУТЬ раньше: я записал значение

//As in my example dateTime was initialized with new Date()
dateTime.getYear()

И значение, показанное в журнале, было 111 !Я знаю, что этот метод устарел и уместен по уважительным причинам ... Моя ошибка заключалась в том, чтобы не проверять, возвращено ли значение 2011 - вместо 111 возвращается - как говорится в документации getYear (), он возвращает годы с 1900 года - если мыдобавив 111 к 1900, мы получим 2011 год ... Я на секунду захотел просто добавить 1900 к возвращаемому значению, но здравомыслие взяло меня, и я решил вместо этого использовать класс java Calendar .

Причина, по которой меня сначала вводили в заблуждение, заключается в том, что форматирование моей даты с использованием SimpleDateFormat привело к правильному году - я не учел внутреннюю работу SimpleDateFormat, иначе я мог бы понять, что я нахожусь наневерный трек с моим объектом Date.

Подводя итог: Нет проблем с DatePickerDialog - проблема была со значениями Date, которые я ему передал.Однако было бы неплохо, если бы в сообщении об ошибке были указаны точные значения, а не текущие:> = ...

0 голосов
/ 22 августа 2011

Я думаю, что он не будет компилироваться, сделать dateTime поле final Кроме того, вы объявили dateSetListener?

...