네이버지도 관련 질문드립니다.


private final NMapLocationManager.OnLocationChangeListener onMyLocationChangeListener = new NMapLocationManager.OnLocationChangeListener() {

        @Override
        public boolean onLocationChanged(NMapLocationManager locationManager, NGeoPoint myLocation) {

            if (mMapController != null) {
                mMapController.animateTo(myLocation);
            }
            Log.d("myLog", "myLocation  lat " + myLocation.getLatitude());
            Log.d("myLog", "myLocation  lng " + myLocation.getLongitude());


            findPlacemarkAtLocation(myLocation.getLongitude(), myLocation.getLatitude());
            //위도경도를 주소로 변환
            return true;
        }

현재 네이버지도API를 통해 현재위치를 마커를통해 검색하게는 구현을 해놓은 상태입니다. 하지만 지도화면에서 뒤로가기버튼을 누르면 바로 어플이 중지됩니다.

아래는 에러화면입니다.

FATAL EXCEPTION: main Process: com.kim.bisos, PID: 19493 java.lang.IllegalStateException: findPlacemarkAtLocation() could not be invoked prior to setMapDataProviderListener(). at com.nhn.android.maps.NMapContext.findPlacemarkAtLocation(NMapContext.java) at com.nhn.android.maps.NMapActivity.findPlacemarkAtLocation(NMapActivity.java) at `

`com.kim.bisos.NaverMyLocation$2.onLocationChanged(NaverMyLocation.java:180)

com.nhn.android.maps.NMapLocationManager.onLocationChanged(NMapLocationManager.java) at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:281) at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:210) at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:226) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5951) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

'''

진한색으로 표시된부분이 에러를 말하는 것같습니다. 도움 주시면 정말 감사하겠습니다.


조회수 135


1 답변


에러 내용은 findPlacemarkAtLocation() 함수를 호출하기 전에 setMapDataProviderListener(OnDataProviderListener listener)를 먼저 호출해야 한다.라는 제약사항을 어겼기 때문에 발생하는 익셉션입니다.

만일 일반적인 케이스에서는 정상동작하는데 뒤로가기 시에만 발생하는 것이라면 액티비티의 라이프사이클이 종료되는 시점에 MapDataProviderListener가 내부적으로 해지되고 난 후 onLocationChanged() 콜백이 호출됐기 때문이 아닐까 추측되고요.

해결 방법 중 하나는 뒤로가기 시점에 setOnLocationChangeListner(null)로 설정을 해서 onLocationChanged() 콜백이 더 이상 호출되지 않도록 처리하면 될 것 같습니다.


  • 안녕하세요 .알려주신대로 setOnLocationChangeListner(onMyLocationChangeListener)에서 setOnLocationChangeListner(null) 로 null값을 추가하여 주었는데 똑같은 에러가 나옵니다.     skywalker   2016.10.1 15:13     
  • 어떤 함수에서 setOnLocationChangeListner(null)로 설정했는지 알 수 있을까요?     한로니로니   2016.10.1 23:04     
  • 네이버 API가이드안에있는 NaverMyLocation 자바파일에서 OnCreate 바로 안에 속해있는 //location manager부분 mMapLocationManager = new NMapLocationManager(this); mMapLocationManager.setOnLocationChangeListener(onMyLocationChangeListener); 여기에서 괄호부분오른쪽함수 onMyLocationChangeListener 부분을 null값을 주었습니다.    skywalker   2016.10.2 11:36     
  • setOnLocationChangeListner(null)을 액티비티의 onBackPressed() 또는 onDestroy() 함수에 넣어보세요.    한로니로니   2016.10.3 22:59     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close