mapbox / mapbox-events-android

Mapbox telemetry and core libraries for Android.
https://docs.mapbox.com/android/core/overview
MIT License
60 stars 48 forks source link

Crash in MapEventFactory.java #191

Closed rlaguerre closed 6 years ago

rlaguerre commented 6 years ago

Since we updated our mapbox sdk version to 6.2.1, we are getting a significant number of crashes at MapEventFactory.java line 50 :

Fatal Exception: java.lang.IllegalStateException
Create a MapboxTelemetry instance before calling this method.
keyboard_arrow_up
arrow_right
com.mapbox.android.telemetry.MapEventFactory.<init> (MapEventFactory.java:50)
com.mapbox.mapboxsdk.maps.MapGestureDetector.sendTelemetryEvent (MapGestureDetector.java:889)
com.mapbox.mapboxsdk.maps.MapGestureDetector.access$700 (MapGestureDetector.java:43)
com.mapbox.mapboxsdk.maps.MapGestureDetector$MoveGestureListener.onMoveBegin (MapGestureDetector.java:441)
com.mapbox.android.gestures.MoveGestureDetector.analyzeMovement (MoveGestureDetector.java:154)
com.mapbox.android.gestures.MultiFingerGesture.analyzeEvent (MultiFingerGesture.java:98)
com.mapbox.android.gestures.ProgressiveGesture.analyzeEvent (ProgressiveGesture.java:46)
com.mapbox.android.gestures.MoveGestureDetector.analyzeEvent (MoveGestureDetector.java:135)
com.mapbox.android.gestures.BaseGesture.analyze (BaseGesture.java:56)
com.mapbox.android.gestures.BaseGesture.onTouchEvent (BaseGesture.java:34)
com.mapbox.android.gestures.AndroidGesturesManager.onTouchEvent (AndroidGesturesManager.java:186)
com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerCamera$PluginsGesturesManager.onTouchEvent (LocationLayerCamera.java:223)
com.mapbox.mapboxsdk.maps.MapGestureDetector.onTouchEvent (MapGestureDetector.java:217)
com.mapbox.mapboxsdk.maps.MapView.onTouchEvent (MapView.java:440)
android.view.View.dispatchTouchEvent (View.java:11776)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2962)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2643)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2968)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2657)
com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:448)
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1829)
android.app.Activity.dispatchTouchEvent (Activity.java:3307)
android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:68)
com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:410)
android.view.View.dispatchPointerEvent (View.java:12015)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:4795)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:4609)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4147)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4200)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4166)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:4293)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4174)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:4350)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4147)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4200)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4166)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4174)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4147)
android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:6661)
android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:6635)
android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:6596)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:6764)
android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:186)
android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (InputEventReceiver.java)
android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:177)
android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:6735)
android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:6787)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:911)
android.view.Choreographer.doCallbacks (Choreographer.java:723)
android.view.Choreographer.doFrame (Choreographer.java:652)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
android.os.Handler.handleCallback (Handler.java:790)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6494)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

Mapbox SDK version: 6.2.1 Android target version: 26 Min Android version supported: 18 Observed on Android versions: 8.0.0 to 9 (P)

Is this a known issue and can turning off the telemetry fix it?

zugaldia commented 6 years ago

@rlaguerre Thanks for the report. This seems to indicate the Maps SDK hasn't been properly initialized. Could you share when and how are you calling Mapbox.getInstance?

rlaguerre commented 6 years ago

It’s called in our Application onCreate() Mapbox.getInstance(this, BuildConfig.MAPBOX_API_KEY) So it’s only called once when our application is launched

LukasPaczos commented 6 years ago

Hey @rlaguerre, thanks for reporting the issue! Is your Mapbox access token starting with sk.? If yes, this issue was patched up in https://github.com/mapbox/mapbox-gl-native/pull/12405 and ultimately fixed in https://github.com/mapbox/mapbox-gl-native/pull/12458.

Generally, upgrading to v6.3.0 of the Maps SDK should resolve the issue. Closing as resolved, but feel free to reach out if that's not the case, thanks!