마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 오류를 고치고 싶습니다 ㅠㅠ 도와주세요.. 코로나 및 날씨 앱을 제작하고 있습니다

0 추천
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.retrofit, PID: 4849
    java.lang.StringIndexOutOfBoundsException: length=6; regionStart=3; regionLength=-3
        at java.lang.String.substring(String.java:1931)
        at com.example.covid.util.AddressParsingUtil.getSigunguFromFullAddress(AddressParsingUtil.java:22)
        at com.example.covid.ui.settings.SettingsActivity$2.onClick(SettingsActivity.java:66)
        at android.view.View.performClick(View.java:5637)
        at android.view.View$PerformClick.run(View.java:22429)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

 
코로나 및 날씨 앱을 제작 하고 있는데 GPS를 사용하여 현재 위치를 잡는 것을 키려고 하면 앱이 강제 종료가 되네요..

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.retrofit, PID: 5001
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.retrofit/com.example.covid.dust.DustActivity}: java.lang.NullPointerException: println needs a message
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.NullPointerException: println needs a message
        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:236)
        at com.example.covid.dust.DustActivity.setLocation(DustActivity.java:88)
        at com.example.covid.dust.DustActivity.onCreate(DustActivity.java:44)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

 

미세먼지 탭에서도 강제 종료가 됩니다.. 도와주세요 여러분들
redsquad (120 포인트) 님이 2021년 4월 8일 질문

1개의 답변

0 추천

에러로그에 어디가 문제인지 나와 있네요.

java.lang.StringIndexOutOfBoundsException: length=6; regionStart=3; regionLength=-3
        at java.lang.String.substring(String.java:1931)
        at

 com.example.covid.util.AddressParsingUtil.getSigunguFromFullAddress(AddressParsingUtil.java:22)
        at com.example.covid.ui.settings.SettingsActivity$2.onClick(SettingsActivity.java:66)
       

DustActivity클래스에 AddressParsingUtil.getSigunguFromFullAddress를 사용할 때 문제가 생긴 거구요. 이유는 해당 메소드를 사용할 때 주소의 길이의 범위를 넘어서 substring을 하시려고 했기 때문에,  StringIndexOutOfBoundsException가 발생한 겁니다. 아마도 어떤 값이 들어오는지 보려고 출력하신 거 같은데, 해당 부분을 에러가 발생하지 않도록 고치시거나, print하는 부분을 지우시고 디버깅을 사용하셔도 될 것 같습니다.

substring같은 메소드를 사용할 때는 API문서를 보고 어떤 Exception을 던지는지에 따라 에러처리가 병행되어야 합니다.

spark (227,530 포인트) 님이 2021년 4월 8일 답변
...