与ItemizedOverlay崩溃的问题
我一直想花几个小时来弄明白,为什么我不能在添加到地图的顶点之前不使用分层地图覆盖层:
GeoPoint point; OverlayItem overlayitem = new OverlayItem(point, "",""); MarkerOverlay.addOverlay(overlayitem);
如果我试图做到这一点没有MarkerOverlay.addOverlay(overlayitem);
命令然后当我尝试添加一个新的overLay像这样:
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(我不知道什么时候或为什么 – 它说,它没有源代码时可用的debugging)
有任何想法吗?
编辑:这是我可以在logcat中find:
09-20 22:36:22.164: WARN/dalvikvm(311): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
这是我认为是臭名昭着的例外:
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
我最近遇到这个问题。 这个错误报告中概述了这个问题。
要修复它,你应该在任何数据填充之前调用你的ItemizedOverlay中的populate()。 我将它添加到构造函数中:
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 } }
分项叠加需要第2个参数,因为它用于点击事件。 当您点击其中一个分项叠加时,它会有一个标题和一个与其相关的描述,它们是叠加项目中的第二个和第三个参数
如果您对ItemizedOverlay进行重要更改,则您每次都可以执行此操作
- delete_usrer_Marker_from_Overlays(myitemizedoverlay);
- create_user_Marker(myitemizedoverlay);
- 。调用MapView.getOverlays()添加(myitemizedoverlay);
同
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); } } } }
- 启动模拟器时出错
- Facebook SDK 4.10上的NPE:尝试调用空对象引用上的接口方法java.lang.Object com.facebook.inject.Lazy.get()
- 错误:在Android Studio中找不到名称为“default”的configuration
- 如何使用android设置图标创build一个android菜单项
- Google Maps API v2会在MapFragment上绘制圈子的一部分
- 如何获得textview的文本颜色?
- Android:使用onBackPressed()和Toast的正确方法
- 在ProjectScopeServices中没有可用的Factorytypes的服务
- 适用于Android的图表