1

내 안드로이드 에뮬레이터에서 이상하게 들리는 현상 (API 레벨 10에서 실행되는 코드 및 에뮬레이터 - Android 2.3.3 임) : 내 에뮤의 현재 날짜는 22.08.2011입니다. - DatePickerDialog 이러한 설정 (새로운 날짜()의 값을 사용 - 현재 날짜/시간과 날짜를 초기화하는)에 다음과 같은 예외와 다음이 실패 : 안드로이드 DatePickerDialog - IllegalArgumentException으로 실패했습니다.

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) 

그래서 나는 API의 LVL 들어합니다 ( source Code for DatePicker를 체크 아웃 2.3.3) 그리고 DatePicker 코드를 확인했는데 (이는 updateSpinners 메소드에서 실패한 것을 알기 때문에) 위의 스택 추적에서 네 번째 라인 인 357 번째 라인에서 mYearPicker.setCurrent (mYear)를 호출했다. 내게 뭔가 잘못되었다고 생각하게 만들었습니다. 제가 통과 한 해를 기록했습니다 - 예상대로 2011 년입니다. 그래서 저는 수동으로 대신 2010 년을 통과 시켰습니다 - DatePickerDialog가 나타났습니다 - 2010 년으로 초기화되었습니다 (나쁘지 만 현재 2011 년이 정말 필요합니다) ...).

이유가 무엇인지에 관해서는 약간의 손실이 있습니다 ... 내 에뮬레이터의 날짜는 위에서 설명한대로 22.08.2011로 올바르게 설정됩니다. 내 dev PC는 같은 날짜로 설정됩니다. ..

내가 잘못 가고있는 것에 대한 단서/아이디어가 있습니까? 나는 그것이 컴파일 dateTime 필드 final을하지 않습니다 생각

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

감사 & 안부가, 이

답변

5

좋아 내가 WAY 전에 했어야 뭔가에 의지 좀 더 fiddeling 후 : 나는

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

의 값을 기록하고 로그가 보여 값은 111이었다! 나는이 메소드가 더 이상 사용되지 않고 좋은 이유로 인해서 유용하다는 것을 알고있다. 나의 실수는 2011 년 값이 리턴된다는 것을 검증하지 않는 것이었다. 대신에 getYear()의 문서에서 1900 년 이후의 년을 리턴한다. 111에서 1900까지를 추가하면 2011 년에 끝납니다. 반환 값에 1900을 더하는 것이 유감이지만, 제게는 더 좋은 것을 얻었고 Java 클래스를 사용하기로 결정했습니다. 캘린더 대신에.

내가 처음에 오도 된 이유는 SimpleDateFormat을 사용하여 내 날짜를 형식화하면 정확한 연도가 발생한다는 것입니다. SimpleDateFormat의 내부 작업을 고려하지 않았습니다. 그렇지 않으면 잘못된 트랙에 있다는 단서가있을 수 있습니다. 내 Date 객체와

요약 : DatePickerDialog에 문제가 없습니다. 문제는 내가 전달한 Date 값 때문이었습니다. 그러나 오류 메시지가 현재 값 대신 정확한 값을 언급했다면 좋았을 것입니다. = ...

+0

좋은 조언. ** 캘린더 ** 클래스를 사용하여 날짜를 가져오고 설정하는 경향이 있습니다 ** 날짜 * * 계산 등을위한 클래스. – MissPiplup

0

을 Ready4Android 사전에 : 여기 일을 더 쉽게 만들려면 내가 DatePickerDialog를 초기화하고있는 코드입니다. 또한 dateSetListener을 신고하셨습니까?

+0

Hello - 컴파일 및 실행;) dateTime은 최종 선언되지 않았지만 private 멤버 변수입니다 - 위의 코드에서 사람들이 어떤 종류의 변수인지 알 수 있도록 OnClickListener 앞에 그냥 포함 시켰습니다. 예, dateSetListener를 선언했습니다. 그러나 대화 상자가 작동하지 않는 것을 막을 수는 없으므로 문제와 관련이 없습니다 (코드를 주석으로 처리했는지 확인하기 위해 이전처럼 실패합니다). – Ready4Android

+0

P. 실제로 버튼과 OnClickListener를 만들 때와 같은 메서드에서 dateTime을 선언했다면 - 올바른 것이 될 것입니다 - 컴파일 할 필요가없고 최종해야합니다.그러나 앞에서도 언급했듯이, 개인적인 변수이기 때문에 혼란 스럽습니다.이 점을 분명히하기 위해 덧붙여 말했습니다. – Ready4Android

+0

좋아, 내 위의 예제 프로젝트에서 위와 동일한 코드를 사용했는데 오류가 발생합니다. 또한 대화 상자 dateDialog, 그것은 나를 위해 작동하지 않습니다. 하지만 내가 DialPog를 DatePickerDialog로 바꾼다면, 그것은 나에게 잘 돌아 간다. – Sandy