네이버지도 관련 질문드립니다.
조회수 1826회
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)
'''
진한색으로 표시된부분이 에러를 말하는 것같습니다. 도움 주시면 정말 감사하겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
에러 내용은
findPlacemarkAtLocation()
함수를 호출하기 전에setMapDataProviderListener(OnDataProviderListener listener)
를 먼저 호출해야 한다.라는 제약사항을 어겼기 때문에 발생하는 익셉션입니다.만일 일반적인 케이스에서는 정상동작하는데 뒤로가기 시에만 발생하는 것이라면 액티비티의 라이프사이클이 종료되는 시점에 MapDataProviderListener가 내부적으로 해지되고 난 후
onLocationChanged()
콜백이 호출됐기 때문이 아닐까 추측되고요.해결 방법 중 하나는 뒤로가기 시점에
setOnLocationChangeListner(null)
로 설정을 해서onLocationChanged()
콜백이 더 이상 호출되지 않도록 처리하면 될 것 같습니다.-
(•́ ✖ •̀)
알 수 없는 사용자
- 안녕하세요 .알려주신대로 setOnLocationChangeListner(onMyLocationChangeListener)에서 setOnLocationChangeListner(null) 로 null값을 추가하여 주었는데 똑같은 에러가 나옵니다. 김민제 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값을 주었습니다. 김민제 2016.10.2 11:36
- setOnLocationChangeListner(null)을 액티비티의 onBackPressed() 또는 onDestroy() 함수에 넣어보세요. 알 수 없는 사용자 2016.10.3 22:59
-
댓글 입력