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

java.lang.NullPointerException: Attempt to invoke virtual method 오류에 질문 드립니다.

0 추천

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference 이런오류가 뜨는데 어디가 문젠지 모르겠습니다..

public void onMapReady(@NonNull  NaverMap naverMap) {
    Log.d(TAG, "onMapReady");
    new Thread(new Runnable() {
        @Override
        public void run() {
            getXmlData();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < count; i++) {
                        item[i] = new itemApi();
                        item[i].setPrkplceSe(a[i]);
                        item[i].setLatitude(Double.parseDouble(b[i]));
                        item[i].setLongitude(Double.parseDouble(c[i]));

                    }
                    for(int i =0;i<1; i++) {
                        markers[i] = new Marker();
                        markers[i].setPosition(new LatLng(37.61862451533197, 126.69364515817814));
                        markers[i].setWidth(100);
                        markers[i].setHeight(100);
                        markers[i].setMap(naverMap);
                    }

                }
            });
        }
    }).start();
 item[i].setLatitude(Double.parseDouble(b[i])); 이 부분에서 오류라고 뜨는데 해결방안을 알고 싶습니다..
개발초보자1 (140 포인트) 님이 4월 3일 질문

1개의 답변

0 추천

해당 라인을 디버깅 해보시면 금방 찾을 수 있을 것 처럼 보이는데요.b[i], Double.parseDouble, setLatititue, item[i] 를 차례대로 체크해 보세요.

public void onMapReady(@NonNull  NaverMap naverMap) {
    Log.d(TAG, "onMapReady");
    new Thread(new Runnable() {
        @Override
        public void run() {
            getXmlData();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < count; i++) {
                        item[i] = createItemApi(i)
                    }

                    for(int i = 0; i < 1; i++) {
                        markers[i] = createMarker(); 
                    }

                }
            });
        }
    }).start();


}

private ItemApi createItemApi(int position) {
    ItemApi itemApi = new itemApi();
    itemApi.setPrkplceSe(a[position]);
    itemApi.setLatitude(Double.parseDouble(b[position]));
    itemApi.setLongitude(Double.parseDouble(c[position]));
    return itemApi;
}


private Market createMarker() {
      Marker marker = new Marker();
      marker.setPosition(new LatLng(37.61862451533197, 126.69364515817814));
      marker.setWidth(100);
      marker.setHeight(100);
     marker.setMap(naverMap);
     return marker;
}

위처럼 하셔야 디버깅하실 때 살짝 더 편하실 듯 하네요. items[i]가 뭔지 머릿속에서 다시 생각할 필요가 없어서 코드가 읽기가 조금 더 쉽구요.

spark (42,940 포인트) 님이 4월 3일 답변
spark님이 4월 3일 수정
해결이안되네요ㅠㅠㅠ
 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
        at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1068)
        at java.lang.Double.parseDouble(Double.java:547)
        at com.example.naver.MainActivity$2$1.run(MainActivity.java:177)
        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:6682)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
이런오류가 뜹니다..
MainActivity.java:177 부분이
item[i].setLatitude(Double.parseDouble(b[i])); 이 부분이구요..
b[i] 가 String 타입으로 보이고 이것이 NULL이라는 뜻으로 보입니다.
어떻게 수정하면 좋을까요ㅠㅠㅠ?
b[i]에 값이 정상적으로 잘 들어가는지 확인이 필요해 보이는 군요.
먼저 저런 상황에 따른 비지니스 요구사항을 명확하게 확인하세요. 에러로그를 저장한다던가 사용자 화면에 에러 관련된 표시를 한다던가 하는. 그런게 아니고 널값이 들어올 수 있는데 처리를 안하신 거면 b[i]에 널이 들어오는지 확인을 하신다음, 널이 아닐 경우만 처리하세요.
만약 널이 들어오는 경우가 발생하지 않아야 하는 경우라면 비지니스 쪽에 상황설명을 하시고 어떻게 처리할 것인지 결정하셔야 겠죠.
...