android TimePickerDialog method 질문

조회수 1900회

TimePickerDialog를 이용하여 시간을 설정하는데 잘 안되는 부분이 있어서 질문드립니다.

 private TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            if(hourOfDay < 10){
                strHourOfDay = "0" + hourOfDay;
            } else { strHourOfDay = String.valueOf(hourOfDay);}

            if(minute < 10){
                strMinute = "0" + minute;
            } else { strMinute = String.valueOf(minute);}

            period.put("hour",strHourOfDay);
            period.put("minute",strMinute);

            periodTime.setText(strHourOfDay + ":" + strMinute);
        }
    };

위 코드에서 hourOfDay는 오류없이 if문을 거쳐서 잘 저장됩니다. 그런데 디버깅을 해보면 minute가 10미만이면 저장이 되는데 10이 넘어가면 strMinute = String.valueOf(minute); 이부분에서 strMinute에 null값이 들어가네요. hourOfDay, minute 둘다 int값인데 왜 차이가 나는거죠?

디버깅창을 보니 이미지

hourOfDay와 minute 앞에 아이콘이 다른데 이것때문인가요? 도저히 모르겠습니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 스크린 샷의 디버깅 창에 minute = 30이라고 나오는 상황에서 strMinute = String.valueOf(minute); 라인이 실행되고 나면 null이 되는 것인가요? 디버거를 이용해서 라인 단위로 수행(Step over)이 가능하니 한번 더 확인이 필요할 것 같고요. 올려주신 코드에는 문제가 없습니다. 다른 코드로 인해 strMinute가 null이 되는 부분은 없는지 확인 해보세요.

    아이콘은 변수의 타입을 나타낼 뿐입니다. 아래 링크에서 Variable types이라는 항목을 참고하세요. minute의 아이콘은 기본 타입(Primitive type)을 의미합니다. hourOfDay의 P는 언급되어 있지 않아서 정확한 의미는 모르겠습니다.

    그리고 자리수를 맞추고 싶은 것이라면 String.format() 함수를 이용해보세요. 코드는 아래와 같이 수정하면 됩니다. if, else 문을 제거할 수 있기 때문에 코드가 간결해 집니다.

    strHourOfDay = String.format("%02d", hourOfDay);
    strMinute  = String.format("%02d", minute);
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 자세한 답변 감사합니다! 라인단위 수행해보니 이상하게 minute else 문에서만 null값을 출력하더라구요. 이것저것해보니 해답을 알았습니다. if문도 strMinute = "0" + String.valueof(minute); 를 해줘야 else문에서도 제대로 값이 들어갔습니다. 알 수 없는 사용자 2016.9.24 11:09

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)