2011-06-09 61 views
1

请指导我在这里做什么错误? 任何帮助,将不胜感激。java.util.ConcurrentModificationException?

private void LoopThroughEachATMToDisplayOnMap() 
      { 


       Drawable drawable = null; 

       for (int i = 0; i < atm.getAtmList().size(); i++) { 

        if(breakFlag) 
         break; 

        drawable = getAppropriatePin(i); 
        if(drawable == null) 
        drawable = getResources().getDrawable(R.drawable.marker); 
        itemizedOverlay = new MyItemizedOverlay(drawable, mapView); 

        ATM a = atm.getAtmList().get(i); 
        if (a != null) { 
         int[] coordinates = getIntCoordinates(a 
           .getCoordinates()); 
         if (coordinates != null) { 
          GeoPoint point = new GeoPoint(coordinates[0], 
            coordinates[1]); 
          OverlayItem overlayItem = new OverlayItem(
            point, a.getBankName(), a.getAddress() 
              + "@@" + a.getPhone() + "@@" 
              + a.getWebAddress() + "@@" 
              + a.getCoordinates()); 
          itemizedOverlay.addOverlay(overlayItem); 
          System.out 
            .println("coordinates-------------------------" 
              + i + " " 
              + coordinates[0] 
              + "," 
              + coordinates[1]); 
         } 

        } 
        if(mapOverlays == null) 
         mapOverlays = mapView.getOverlays(); 

        mapOverlays.add(itemizedOverlay); 
       } 
       System.out.println("atms maps injection complete--------------------------------"); 

      }  

    06-09 18:41:12.019: ERROR/AndroidRuntime(13973): Uncaught handler: thread main exiting due to uncaught exception 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973): java.util.ConcurrentModificationException 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at com.google.android.maps.MapView.onDraw(MapView.java:494) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.View.draw(View.java:6535) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.drawChild(ViewGroup.java:1585) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1312) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.View.draw(View.java:6538) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.drawChild(ViewGroup.java:1585) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1312) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.View.draw(View.java:6538) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.drawChild(ViewGroup.java:1585) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1312) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.View.draw(View.java:6538) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.widget.FrameLayout.draw(FrameLayout.java:352) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1866) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewRoot.draw(ViewRoot.java:1364) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1118) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1650) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.os.Looper.loop(Looper.java:123) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at android.app.ActivityThread.main(ActivityThread.java:4595) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at java.lang.reflect.Method.invokeNative(Native Method) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at java.lang.reflect.Method.invoke(Method.java:521) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
    06-09 18:41:12.149: ERROR/AndroidRuntime(13973):  at dalvik.system.NativeStart.main(Native Method) 
+0

你正在做这样的''ArrayList arr = new ArrayList (); arr.add(1); arr.add(2); arr.add(3);/*从这里*/for(int i:arr){arr.add(5);}'...换句话说,当您迭代它时修改集合 – Selvin 2011-06-09 14:22:31

+0

我没有修改任何地方的集合... – UMAR 2011-06-10 07:56:26

回答

5

我得到了答案我的自我。

实际上mapOverlays.add(itemizedOverlay);需要用户界面运行。

所以它不是UI线程多数民众赞成为什么它会引发错误。

我刚刚在uithread中运行了该函数,并解决了我的问题。

+0

感谢提示需要UI才能运行的mapOverlays.add(itemizedOverlay)。我试图在AsyncTask中使用它,并在onPostExecute方法中执行mapOverlays.add(itemizedOverlay),因为它提供了UI访问。但是,单击overlay项目会使消息崩溃:“android.view.WindowManager $ BadTokenException:无法添加窗口 - 标记null不适用于应用程序”。在AsyncTask中添加叠加层的正确方法是什么?顺便说一句,我应该提到,覆盖项目工作得很好,然后才转移到AsyncTask方法。 – PeteH 2013-01-29 08:35:34

相关问题