android - MapView ItemizedOverlay 上的 draw() 问题

标签 android google-maps

我正在为巴黎地铁开发一个应用程序。 其中一项功能是一张 map ,您可以在其中单击地铁站并查看地铁线路,以及该站接下来的 4 趟火车是什么时候。

因此我创建了一个 MapActivity 和一个 ItemizedOverlay 类。

在我的设备上它运行完美,但我从用户那里收到一些崩溃的日志,我真的不明白哪里出了问题。

我的 map Activity 添加了一个 ItemizedOverlay,它为当前用户位置显示一个蓝点。此叠加层还监听 onTap,它会根据点击的坐标尝试查找地铁站(我知道其纬度/经度坐标)。这是完美的工作。

崩溃的堆栈跟踪是:

java.lang.NullPointerException
at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
at com.google.android.maps.MapView.onDraw(MapView.java:494)
at android.view.View.draw(View.java:6535)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6538)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6538)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1830)
at android.view.ViewRoot.draw(ViewRoot.java:1349)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1114)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

有时它来自不同的线路,但它总是在 OverlayBunde.java:42 处崩溃

因为没有提到我的代码,我不知道哪里出了问题。

您可以获取MapActivityItemizedOverlay 的源代码:http://code.google.com/p/metroparis/source/browse/trunk/src/org/bicou/metro/

Activity 类是ACarteStations,覆盖类是StationMetroMapOverlay

很抱歉代码是法语的。我最终会翻译它:) 如果您需要有关变量名称的翻译,请告诉我。

希望你能帮助我!!

最佳答案

我猜测 ajouterOverlayPosition() 中的以下行 (#106) 是您出错的原因:

if (l == null) {
        return null;
}

可能发生的一件事是设备无法找到您的位置(在 lm.getLastKnownLocation(...),第 73 行)。在这种情况下,您返回 null,并将该 null 添加到 onCreate() 中的 mapOverlays。 onDraw() 尝试绘制所有叠加层,包括此 null 叠加层,并抛出 NullPointerException。

您可能应该以不同的方式处理空位置问题(也许显示错误日志,或者重试,或者使用一些默认位置...)。

关于android - MapView ItemizedOverlay 上的 draw() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3583840/

相关文章:

android - 为 Android 显示自定义信息窗口 Android map 实用程序库

java - map 上多个标记的实时动画

android - SupportMapFragment 中如何使用深色模式?

android - 为什么Android在通过蓝牙OPP接收时对可接受的文件类型限制如此严格?

java - StringTokenizer、JSON 和逗号

android - 为什么集成React Native时compileSdkVersion错误?

android - Samsung Galaxy SIII 问题 - Camera.onPictureTaken() 返回交错图像而不是正确的捕获图像

javascript - Google Maps JavaScript API 显示灰色空白框而不是 map

javascript - google maps api V3 需要 key 吗?

android - 是否可以用 List 填充 ListView