【问题标题】:Problem with draw() on a MapView ItemizedOverlayMapView ItemizedOverlay 上的 draw() 问题
【发布时间】:2010-08-27 11:54:53
【问题描述】:

我正在为巴黎地铁开发一个应用程序。 其中一个功能是地图,您可以在其中单击地铁站,查看地铁线路是什么,以及该站接下来的 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

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

希望你能帮助我!!

【问题讨论】:

  • 我还想列出崩溃的设备,我不知道是否相关: - HTC Desire 2.2 FRF91 - HTC HD2 2.2 FRF91 - Sony Ericsson X10i 1.6 - Acer Liquid 2.1 - 三星 GT-I5700 2.1 - Nexus One 2.1 EPE54B - 三星 GT-I9000 2.1 我的设备(我没有遇到此问题)是 Nexus One 2.2 FRF91 (CyanogenMod6RC2)

标签: android google-maps


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢您!就是这样!聪明的猜测。抱歉,我花了这么长时间才回复,我遇到了互联网问题。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
相关资源
最近更新 更多