에러(error)
Tag: AndroidRuntime
Text: 01-27 13:46:42.550: E/AndroidRuntime(474): java.lang.RuntimeException: Unable to start service com.example.earthquake.EQService@44f75f98 with Intent { cmp=com.example.earthquake/.EQService }: java.lang.IllegalArgumentException
Text: 01-27 13:46:42.550: E/AndroidRuntime(474): java.lang.RuntimeException: Unable to start service com.example.earthquake.EQService@44f75f98 with Intent { cmp=com.example.earthquake/.EQService }: java.lang.IllegalArgumentException
원인(cause)
IllegalArgumentException 예외가 발생했는데, 이 예외는 부정한 인수, 또는 부적절하는 인수를 메소드에 건네줬을 때 발생한다. 따라서 메소드로 제대로된 인수를 넘기지 않았을 때, 이 예외가 발생한다는 것이다. 위 에러 내용을 보면 "service"에서 발생한 에러라는 것을 짐작할 수 있다. 코드 내용 중에 이부분을 살펴보면 된다.
아래 내가 구현한 코드를 보면, 빨간색으로 표시한 부분에서 에러가 발생한 것이다.
정수인 int가 저장된 array를 가져와야 하는데, string이 저장된 array를 가져온 것이었다.
참고로, 내가 만들어놓은 xml 파일 안에는 아래처럼,
R.array.spinner_frequency의 item들에는 String값이 들어있고,
R.array.values_frequency의 item들에는 int값이 들어있다.
매칭되는 값을 가져오려고 이렇게 했다.
<item>frequency 5</item> <item>5</item> |
해결(solution)
String 타입 리소스를 String으로 가져오게 하면 되므로, R.array.spinner_frequency 를 R.array.values_frequency 로 수정해서 에러를 잡을 수 있었다.
feedPeriod = getResources().getStringArray(R.array.values_period)[indexPeriod]; itemDateFormat = getResources().getStringArray(R.array.formats_period)[indexPeriod]; updateFrequency = getResources().getIntArray(R.array.spinner_frequency)[indexFrequency]; enableAutoUpdate = preferences.getBoolean(Preferences.PREF_AUTOUPDATE, false); retrieveFeed(); timerUpdate.cancel(); if(enableAutoUpdate){ timerUpdate = new Timer(TIMER_ID); timerUpdate.scheduleAtFixedRate(new TimerTask(){ public void run(){ retrieveFeed(); } }, 0, updateFrequency*60*1000); } |