在Map View Itemized Overlay上绘制draw()的问题

时间:2010-08-27 11:54:54

标签: android google-maps

我正在为巴黎地铁开发一个应用程序。 其中一个功能是地图,您可以点击地铁站,看看地铁线路是什么,以及该站下4列火车的时间。

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

在我的设备上它运行正常,但是我从崩溃的用户那里得到了一些日志,我真的不明白什么是错的。

我的地图活动添加了一个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/

活动类为ACarteStations,叠加层为StationMetroMapOverlay

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

希望你能帮助我!!

1 个答案:

答案 0 :(得分:1)

我猜测ajouterOverlayPosition()中的以下行(#106)是导致错误的原因:

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

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

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