我正在为巴黎地铁开发一个应用程序。 其中一项功能是一张 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
处崩溃
因为没有提到我的代码,我不知道哪里出了问题。
您可以获取MapActivity
和ItemizedOverlay
的源代码: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/