Playmap-HAE / Playmap-developers

Playmap Developers
0 stars 0 forks source link

[Crash Issue] getZoomLevel crash Error! #8

Open jw-choi-hyundai opened 3 years ago

jw-choi-hyundai commented 3 years ago

맵 onCreate 시점 이후에 zoomLevel을 가져오면 아래와 같이 죽고 있습니다. Button내 listener에서는 잘가져오고 있는데, 바로 onCreate 시점 이후에는 호출 시 죽는 것으로 보입니다.

[소스] mMapView = new PlayMapView(this); mMapView = findViewById(R.id.mapView); mMapView.onCreate(savedInstanceState); int a = mMapView.getZoomLevel();

[에러] E/AndroidRuntime: FATAL EXCEPTION: main Process: com.playmap.playmapdev, PID: 4213 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.playmap.playmapdev/com.playmap.playmapdev.MapActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.mapbox.mapboxsdk.camera.CameraPosition com.mapbox.mapboxsdk.maps.MapboxMap.getCameraPosition()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.mapbox.mapboxsdk.camera.CameraPosition com.mapbox.mapboxsdk.maps.MapboxMap.getCameraPosition()' on a null object reference at com.hmns.playmap.PlayMapView.getZoomLevel(PlayMapView.java:1929) at com.playmap.playmapdev.MapActivity.onCreate(MapActivity.java:56) at android.app.Activity.performCreate(Activity.java:7995) at android.app.Activity.performCreate(Activity.java:7979) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:223)  at android.app.ActivityThread.main(ActivityThread.java:7656)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

Playmap-HAE commented 3 years ago

안녕하세요. PlayMap입니다.

지도 로딩 전에 zoomLevel을 가져와서 발생한 오류로 확인됩니다. onCreate 함수 내에서 zoomLevel을 얻기 위해서는 다음과 같이 참고부탁드립니다.

// 지도 생성시 중심점 좌표 설정 mapView.initMap(37.56640, 126.97851, 17);

// 지도 로딩 후 호출 Listener mapView.onMapInitListener(new PlayMapView.OnMapInitCallback() { @Override public void onMapInitEvent(int zoom, PlayMapPoint playMapPoint) { int a = mapView.getZoomLevel(); } });

// 지도 zoomLevel 변경 시 호출 Listener mapView.onZoomLevelChangeListener(new PlayMapView.OnZoomLevelChangeCallback() { @Override public void onZoomLevelChangeEvent(int zoom) { int b = mapView.getZoomLevel(); } });

jw-choi-hyundai commented 3 years ago

대부분의 mapView의 Value의 경우 지도가 완료 되어야 (value 세팅 후) 가져 올 수 있는 것 같은데, 해당 Crash에 대한 예외처리 (또는 가이드) 가 없어 보입니다. 사용자 입장에서는 SDK를 사용할 때 상당히 난해 할 수 있을 것 같습니다.

Google Map 처럼 아에 Override 함수를 통해 Map의 로딩 완료 시점을 따로 두는게 좋지 않을까 의견 드립니다.

@Override
public void onMapReady(final GoogleMap googleMap)