与碰撞与ItemizedOverlay问题

编程入门 行业动态 更新时间:2024-10-26 02:31:34
本文介绍了与碰撞与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问题

本文发布于:2023-11-05 06:17:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1560124.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:ItemizedOverlay

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!