Getting concurrentModificationError error in android?
<p>hi i am getting Concurrent Modification error with the below code. the problem is arising because i am trying to set a marker and along with trying to draw a path, but i dont know how to solve the error.</p>

<pre><code>package infy.route;


public class MapRouteActivity extends MapActivity {


        MapView mapView;
        private Road mRoad;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.routeplanning);

                mapView = (MapView) findViewById(R.id.mapview);
                mapView.setBuiltInZoomControls(true);

                Bundle extras = this.getIntent().getExtras();
                String fLat=extras.getString("fromLat");
                String fLong=extras.getString("fromLong");
                String tLat=extras.getString("toLat");
                String tLong=extras.getString("toLong");

                final double fromLat=Double.parseDouble(fLat);
                final double fromLon=Double.parseDouble(fLong);
                final double toLat=Double.parseDouble(tLat);
                final double toLon=Double.parseDouble(tLong); 

          new Thread()
         {
                        @Override
                        public void run() 
                        {



                              //double fromLat = 28.6353, fromLon = 77.2250, toLat = 30.7313, toLon = 76.7754;
                                /***url contains the path to fetch the kml file from the internet*/
                                String url = RoadProvider
                                                .getUrl(fromLat, fromLon, toLat, toLon);
                                InputStream is = getConnection(url);
                                mRoad = RoadProvider.getRoute(is);
                                mHandler.sendEmptyMessage(0);
                        }
                }.start();
        }

        Handler mHandler = new Handler()
        {
                public void handleMessage(android.os.Message msg)
                {
                        TextView textView = (TextView) findViewById(R.id.description);
                        textView.setText(mRoad.mName + " " + mRoad.mDescription);
                        MapOverlay mapOverlay = new MapOverlay(MapRouteActivity.this, mRoad, mapView);
                        List&lt;Overlay&gt; listOfOverlays = mapView.getOverlays();
                        listOfOverlays.clear();
                        listOfOverlays.add(mapOverlay);
                        mapView.invalidate();
                };
        };

        private InputStream getConnection(String url) {
                InputStream is = null;
                try {
                        //Opens a connection to the remote database(bidirectional)
                        URLConnection conn = new URL(url).openConnection();
                        is = conn.getInputStream();
                } catch (MalformedURLException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return is;
        }

        @Override
        protected boolean isRouteDisplayed() {
                return false;
        }
}

class MapOverlay extends com.google.android.maps.Overlay {
        Road mRoad;
        ArrayList&lt;GeoPoint&gt; mPoints;
        Drawable greenMarker;
        Drawable finishMarker;
        HelloItemizedOverlay itemizedOverlay;
        List&lt;Overlay&gt; mapOverlays;
        LinearLayout linearLayout;
        Context context;


        public MapOverlay(Context context, Road road, MapView mv)
        {
                mRoad = road;
                this.context = context;
                if (road.mRoute.length &gt; 0)
                {
                        mPoints = new ArrayList&lt;GeoPoint&gt;();
                        for (int i = 0; i &lt; road.mRoute.length; i++)
                        {

                                mPoints.add(new GeoPoint((int) (road.mRoute[i][1] * 1000000),
                                                (int) (road.mRoute[i][0] * 1000000)));

                        }
                        int moveToLat = (mPoints.get(0).getLatitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLatitudeE6() - mPoints.get(0)
                                        .getLatitudeE6()) / 2);
                        int moveToLong = (mPoints.get(0).getLongitudeE6() + (mPoints.get(
                                        mPoints.size() - 1).getLongitudeE6() - mPoints.get(0)
                                        .getLongitudeE6()) / 2);
                        GeoPoint moveTo = new GeoPoint(moveToLat, moveToLong);

                        MapController mapController = mv.getController();
                        mapController.animateTo(moveTo);
                        mapController.setZoom(7);
                }
        }

        @Override
        public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
                super.draw(canvas, mv, shadow);
                drawPath(mv, canvas);
                return true;
        }

        public void drawPath(MapView mv, Canvas canvas) {


            greenMarker = context.getResources().getDrawable(R.drawable.greenmarker);

                int x1 = -1, y1 = -1, x2 = -1, y2 = -1;
                    Paint paint = new Paint();
                paint.setColor(Color.GREEN);
                paint.setStyle(Paint.Style.STROKE);
                paint.setStrokeWidth(3);
                mapOverlays = mv.getOverlays();
                itemizedOverlay = new HelloItemizedOverlay(greenMarker);

                for (int i = 0; i &lt; mPoints.size(); i++)
                {
                        Point point = new Point();
                        mv.getProjection().toPixels(mPoints.get(i), point);
                        if(i == 1){
                            OverlayItem overlayitem = new OverlayItem(mPoints.get(0), "", "");
                            itemizedOverlay.addOverlay(overlayitem);
                            mapOverlays.add(itemizedOverlay);      
                        }

                        x2 = point.x;
                        y2 = point.y;
                        if (i &gt; 2) {
                                canvas.drawLine(x1, y1, x2, y2, paint);
                        }
                        x1 = x2;
                        y1 = y2;
                }

        }
}
</code></pre>

<p>Below is the stacktrace :-</p>

<pre><code>02-24 00:51:55.200: ERROR/AndroidRuntime(1385): Uncaught handler: thread main exiting due to uncaught exception
02-24 00:51:55.220: ERROR/AndroidRuntime(1385): java.util.ConcurrentModificationException
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:66)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:41)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at com.google.android.maps.MapView.onDraw(MapView.java:476)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.View.draw(View.java:6274)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.View.draw(View.java:6277)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.drawChild(ViewGroup.java:1526)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.drawChild(ViewGroup.java:1524)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1256)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.View.draw(View.java:6277)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1883)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewRoot.draw(ViewRoot.java:1332)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1097)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1613)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.os.Looper.loop(Looper.java:123)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at android.app.ActivityThread.main(ActivityThread.java:4203)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at java.lang.reflect.Method.invokeNative(Native Method)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at java.lang.reflect.Method.invoke(Method.java:521)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
0    2-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
02-24 00:51:55.220: ERROR/AndroidRuntime(1385):     at dalvik.system.NativeStart.main(Native Method)
</code></pre>
