首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemizedOverlay崩溃的问题

ItemizedOverlay崩溃的问题
EN

Stack Overflow用户
提问于 2010-09-21 06:15:48
回答 3查看 6.9K关注 0票数 39

我已经尝试了几个小时,试图弄清楚为什么我不能在不这样做的情况下使用分项地图覆盖,然后再将其添加到地图的ovelays中:

GeoPoint point; OverlayItem overlayitem = new OverlayItem(point, "",""); MarkerOverlay.addOverlay(overlayitem);

如果我尝试在不使用MarkerOverlay.addOverlay(overlayitem);命令的情况下执行此操作,则当我尝试添加新的overLay时,如下所示:

代码语言:javascript
复制
public boolean onTap(GeoPoint point, MapView mapView)
{
    if (mOverlays.size() > 0)
        mOverlays.remove(0);
    OverlayItem overlayitem = new OverlayItem(point, "", "");
    mOverlays.add(overlay);
    populate();
    return true;
}

在我的ItemizedOverlay类中,我只是得到了一个空引用exeption (我不知道什么时候或者为什么-它说在调试时没有源代码)

有什么想法吗?

编辑:这是我在logcat中可以找到的:

代码语言:javascript
复制
09-20 22:36:22.164: WARN/dalvikvm(311): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

这就是我认为的臭名昭著的例外:

代码语言:javascript
复制
   09-20 22:36:22.293: ERROR/AndroidRuntime(311): java.lang.NullPointerException
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:625)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.View.dispatchTouchEvent(View.java:3709)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.os.Looper.loop(Looper.java:123)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at android.app.ActivityThread.main(ActivityThread.java:4363)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at java.lang.reflect.Method.invokeNative(Native Method)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at java.lang.reflect.Method.invoke(Method.java:521)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-20 22:36:22.293: ERROR/AndroidRuntime(311):     at dalvik.system.NativeStart.main(Native Method)
09-20 22:36:22.394: ERROR/dalvikvm(311): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-15 07:55:57

我最近遇到了这个问题。此bug report中概述了该问题。

要解决这个问题,应该在填充任何数据之前在ItemizedOverlay中调用populate()。我将其添加到构造函数中:

代码语言:javascript
复制
private class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private Context context;
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    LocationItemizedOverlay(Drawable defaultMarker, Context context) {
        super(boundCenterBottom(defaultMarker));
        this.context = context;
        populate(); // Add this
    }
}
票数 115
EN

Stack Overflow用户

发布于 2010-09-21 07:59:27

分项覆盖需要第二个2个参数,因为它将它们用于单击事件。单击其中一个逐项叠加时,它将具有与之关联的标题和描述,这是叠加项目中的第2个和第3个参数

票数 0
EN

Stack Overflow用户

发布于 2013-10-04 11:40:07

如果你在你的ItemizedOverlay上做了重要的改变,你有很多时间去做

  1. delete_usrer_Marker_from_Overlays(myitemizedoverlay);
  2. create_user_Marker(myitemizedoverlay);
  3. mapView.getOverlays().add(myitemizedoverlay);

使用

代码语言:javascript
复制
private void delete_usrer_Marker_from_Overlays(MyOverlays myio){

    List<Overlay> mapOverlays = mapView.getOverlays();
    if (mapOverlays != null) 
        {
          for (int i = 0;i< mapOverlays.size();i++)
          {
              Overlay x = mapOverlays.get(i);
              if (x.hashCode() == myio.hashCode())
              {
                  mapOverlays.remove(x);
              }                     
          }
        }       
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3755921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档