与碰撞与ItemizedOverlay问题

与碰撞与ItemizedOverlay问题

本文介绍了与碰撞与ItemizedOverlay问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试了几个小时,以找出原因,我可以将它添加到地图的ovelays之前没有这样做,不使用逐项地图覆盖:

的GeoPoint点;OverlayItem overlayitem =新OverlayItem(点,,);MarkerOverlay.addOverlay(overlayitem);

如果我试图做到这一点,而不 MarkerOverlay.addOverlay(overlayitem); 命令然后当我尝试添加一个新的覆盖,像这样:

 公共布尔中的onTap(GeoPoint对象点,图形页面图形页面)
{
    如果(mOverlays.size()大于0)
        mOverlays.remove(0);
    OverlayItem overlayitem =新OverlayItem(点,,);
    mOverlays.add(叠加);
    填充();
    返回true;
}
 

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

任何想法?

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

  09-20 22:36:22.164:WARN / dalvikvm(311):主题ID = 3:线程退出与未捕获的异常(组= 0x4001b188)
 

这就是我认为是臭名昭著的异常:

  09-20 22:36:22.293:ERROR / AndroidRuntime(311):显示java.lang.NullPointerException
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.google.android.maps.MapView.onTouchEvent(MapView.java:625)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.View.dispatchTouchEvent(View.java:3709)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:822)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.app.Activity.dispatchTouchEvent(Activity.java:2061)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.os.Handler.dispatchMessage(Handler.java:99)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.os.Looper.loop(Looper.java:123)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在android.app.ActivityThread.main(ActivityThread.java:4363)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在java.lang.reflect.Method.invokeNative(本机方法)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在java.lang.reflect.Method.invoke(Method.java:521)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:860)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-20 22:36:22.293:ERROR / AndroidRuntime(311):在dalvik.system.NativeStart.main(本机方法)
09-20 22:36:22.394:ERROR / dalvikvm(311):无法打开堆栈跟踪文件/data/anr/traces.txt':权限被拒绝
 

解决方案

我最近碰到这个问题。这个问题在此 bug报告概述。

要解决它,你应该调用填充()在你的ItemizedOverlay任何数据填充之前。我把它添加到构造函数:

 私有类MyItemizedOverlay扩展ItemizedOverlay< OverlayItem> {

    私人上下文的背景下;
    私人的ArrayList< OverlayItem> mOverlays =新的ArrayList< OverlayItem>();

    LocationItemizedOverlay(可绘制defaultMarker,上下文语境){
        超(boundCenterBottom(defaultMarker));
        this.context =背景;
        填充(); //添加这
    }
}
 

I have been trying for hours to figure out why I can not use an Itemized Map overlay without doing this before adding it to the ovelays of the map:

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

If i try to do this without the MarkerOverlay.addOverlay(overlayitem); command then when i try to add a new overLay like so:

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;
}

Inside my ItemizedOverlay class then i Just get a null reference exeption (I have no idea when or why - It says its no source code available when in debug)

Any Ideas?

EDIT:This is what I can find in the logcat :

09-20 22:36:22.164: WARN/dalvikvm(311): threadid=3: thread exiting with uncaught exception (group=0x4001b188)

and this is what I believe to be the infamous exception:

   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
解决方案

I recently came across this problem. The issue is outlined in this bug report.

To fix it you should call populate() in your ItemizedOverlay before any data is populated. I added it to the constructor:

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
    }
}

这篇关于与碰撞与ItemizedOverlay问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 16:46