我像疯子一样用谷歌搜索,但似乎没有人遇到这个确切的问题,到目前为止我不知道如何重现它。
这不是谷歌地图为空的重复问题,我有正确的谷歌地图对象,它不为空,请进一步阅读。
我们有一个在 4 个不同屏幕上使用 Google 地图的应用程序,Crashlytics 向我展示了很多这样的崩溃:
Caused by java.lang.NullPointerException
Attempt to invoke virtual method 'com.google.android.gms.maps.model.MarkerOptions com.google.android.gms.maps.model.MarkerOptions.position(com.google.android.gms.maps.model.LatLng)' on a null object reference
com.androidmapsextensions.lazy.LazyMarker.setPosition (LazyMarker.java:203)
com.androidmapsextensions.impl.DelegatingMarker.setPosition (DelegatingMarker.java:199)
java.lang.reflect.Method.invoke (Method.java)
android.util.ReflectiveProperty.set (ReflectiveProperty.java:118)
android.animation.PropertyValuesHolder.setAnimatedValue (PropertyValuesHolder.java:962)
android.animation.ObjectAnimator.animateValue (ObjectAnimator.java:990)
android.animation.ValueAnimator.animateBasedOnTime (ValueAnimator.java:1316)
android.animation.ValueAnimator.doAnimationFrame (ValueAnimator.java:1446)
android.animation.AnimationHandler.doAnimationFrame (AnimationHandler.java:146)
android.animation.AnimationHandler.-wrap2
android.animation.AnimationHandler$1.doFrame (AnimationHandler.java:54)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:909)
android.view.Choreographer.doCallbacks (Choreographer.java:723)
android.view.Choreographer.doFrame (Choreographer.java:655)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
android.os.Handler.handleCallback (Handler.java:789)
android.os.Handler.dispatchMessage (Handler.java:98)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6944)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
如果来自我的应用程序和我调用 MarkerOptions.position 的所有位置,则该堆栈跟踪中没有类看起来像这样:
Marker busPosition = googleMap.addMarker(new MarkerOptions()
.position(busStopPosition)
.flat(true)
.title(busPositions.getRoute())
.icon(bitmapDescriptor)
.anchor(0.5f, 0.5f)
.data(busPositions)
.clusterGroup(2));
如您所见,标记选项不可能为空,但根据例外,它是!这怎么可能,我该如何解决这个问题,甚至找出我们使用地图的 4 个地方的哪个地方正在发生这种情况?
一些附加信息:
- 似乎当应用程序在后台以及在前台时会发生此异常
- 它发生在运行Android 4.4.2及更高版本的设备上 9
所有帮助将不胜感激!
不知何故,我尝试了您的代码,一旦我调用.data(busPositions)
,您的代码就变得不可接受。顺便说一下,我们像这样添加地图标记,试试这个
googleMap.clear();
LatLng latlng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions options = new MarkerOptions()
.position(latlng)
.title(address);
googleMap.addMarker(options);
我想我想通了,但只有时间才能证明修复程序是否真的解决了问题。
我一直在我的项目中使用'com.androidmapsextensions:android-maps-extensions:2.2.0'
,并注意到该库中的MarkerOptions
类包含一个"真实"的MarkerOptions
对象,该对象有时显然是null
的。我将依赖项升级到'com.androidmapsextensions:android-maps-extensions:2.4.0'
,并将其推广给我们的用户,希望这个问题不会再次出现。
我将在几周内更新这篇文章,并告诉它是否有效:-(