我一直在尝试了几个小时,以找出原因,我可以将它添加到地图的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问题
发布评论