代码之家  ›  专栏  ›  技术社区  ›  Benoit Duffez

MapView ItemizeOverlay上的draw()有问题

  •  1
  • Benoit Duffez  · 技术社区  · 14 年前

    其中一个功能是一个地图,你可以点击地铁站,看看什么是地铁线路,什么时候是这个车站的未来4列车。

    因此,我创建了一个 MapActivity ItemizedOverlay 班级。

    我的地图活动添加了一个 项目化概述

    崩溃的堆栈跟踪是:

    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

    因为没有提到我的代码,我不知道怎么了。

    地图活动 项目化概述 : http://code.google.com/p/metroparis/source/browse/trunk/src/org/bicou/metro/

    ACarteStations 覆盖类是 StationMetroMapOverlay .

    对不起,密码是法语的。我最终会翻译成:)

    希望你能帮助我!!

    1 回复  |  直到 14 年前
        1
  •  1
  •   amitlicht    14 年前

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

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

    可能发生的一件事是,设备无法找到您的位置(在lm.GetLastKnown位置(…),第73行)。在本例中,返回null,并将该null添加到onCreate()处的mapOverlays中。onDraw()尝试绘制所有覆盖,包括这个空覆盖,并抛出一个NullPointerException。