지금 버튼 클릭시마다 현재의 위치값을 저장하고 오버레이 추가하는 작업을 하는데요,
문제는 이작업에서 추가한 오버레이를 2번 연속으로 삭제를 해줄때 위와같은 인덱스초과 에러가 뜨더라구요
로그값찍어보면 탭 누른시점에서 제대로 인덱스랑 어레이 크기가 제대로 찍히는데 꼭 2번째 삭제때는 얼럴트가 안뜨고 그냥 익셉션이 발생되버리더라구요,, 이거로 몇일째 진도를 못나가네요.ㅠㅠㅠ
 
03-09 02:38:01.183: ERROR/AndroidRuntime(14977): java.lang.ArrayIndexOutOfBoundsException
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.ItemizedOverlay.maskHelper(ItemizedOverlay.java:562)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.ItemizedOverlay.setFocus(ItemizedOverlay.java:365)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.ItemizedOverlay.focus(ItemizedOverlay.java:539)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:455)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:647)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.View.dispatchTouchEvent(View.java:3844)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1745)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1137)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1729)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1745)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1137)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1729)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.os.Looper.loop(Looper.java:123)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at java.lang.reflect.Method.invokeNative(Native Method)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at java.lang.reflect.Method.invoke(Method.java:521)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
03-09 02:38:01.183: ERROR/AndroidRuntime(14977):     at dalvik.system.NativeStart.main(Native Method)
///////////////////////////////////////////////////////
 
package pac.ssu.Hendel;

public class MakeBread extends MapActivity {

 private static List<Overlay> overlay;
 OverlayItem overlayitem;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.makebread);
  
  Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
    R.drawable.pic01);
  bitmap = Bitmap.createScaledBitmap(bitmap, 50, 50, false);
  Drawable marker = new BitmapDrawable(bitmap);
  overlayItems = new OverlayItems(marker);
  
  // 맵 속성 설정 생략
  tv = (TextView) findViewById(R.id.show);
  Button addBtn = (Button) findViewById(R.id.addLoc);
  addBtn.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
    locationManager.requestLocationUpdates(provider, 0, 0,
      locationListener);
   }
  });
 } 
 
 @Override
 protected boolean isRouteDisplayed() {
  return false;
 }
 private final LocationListener locationListener = new LocationListener() {
  public void onLocationChanged(Location location) {
      
   if (location != null /* && !lastLoc.equals(location)*/) {
    Toast.makeText(mContext, "좌표값을 저장하였습니다.", Toast.LENGTH_SHORT).show();   
    updateWithNewLocation(location);
    locationManager.removeUpdates(locationListener);    
   }
   else if(lastLoc.equals(location))
   {
    
   }
   lastLoc = location;
   
  }
  public void onProviderDisabled(String provider) {
   updateWithNewLocation(null);
   Toast.makeText(mContext, "좌표값을 불러오는데 실패하였습니다.", Toast.LENGTH_LONG).show();
   
  }
  public void onProviderEnabled(String provider) {
  }
  public void onStatusChanged(String provider, int status, Bundle extras) {
  }
 };
 private void updateWithNewLocation(Location location) {
  if (location != null) {   
//오버레이 추가부분
   overlay = mapView.getOverlays();  
   overlayitem = new OverlayItem(new GeoPoint(
     (int) (location.getLatitude() * 1E6), (int) (location
       .getLongitude() * 1E6)), "", "");
   overlayItems.addOverlayItem(overlayitem);   
   overlay.add(overlayItems);

   Double geoLat = location.getLatitude() * 1E6;
   Double geoLng = location.getLongitude() * 1E6;
   GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
   mapController.animateTo(point); 
  } else {
  }
  
 }
 public class OverlayItems extends ItemizedOverlay<OverlayItem> {
  private List<OverlayItem> items = new ArrayList<OverlayItem>();
  
  public OverlayItems(Drawable defaultMarker) {
   super(boundCenterBottom(defaultMarker));
  }
  @Override
  public GeoPoint getCenter() {
   Integer averageLat = 0;
   Integer averageLon = 0;
   for (GeoPoint point : ItemPoints) {
    averageLat += point.getLatitudeE6();
    averageLon += point.getLongitudeE6();
   }
   averageLat /= ItemPoints.length;
   averageLon /= ItemPoints.length;
   return new GeoPoint(averageLat, averageLon);
  }
  @Override
  protected OverlayItem createItem(int i) {
   return items.get(i);
  }
  @Override
  public int size() {
   return items.size();
  }
  public void mPopulate() {
   populate();
  }
  @Override
  protected boolean onTap(int index) {
   
   final int idx = index;
   //로그값 찍어보면 2번연속 삭제를 해줄때 2번째 오버레이 터치할때 이시점까지 오고 익셉션이 발생되버립니다,,,
  items 어레이값이 크기나 현재 터치한 인덱스는 제대로 찍힌거 확인했구요, 그러니 더더욱 원인을 모르겟네요,

   AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
   builder.setMessage("선택하신 빵을 삭제하시겠습니까?");
   builder.setCancelable(false);
   builder.setPositiveButton("확인",
     new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       // TODO Auto-generated method stub
       if (items.size() > 0) {
        items.remove(idx);        
        populate();        
       }
       dialog.cancel();
      }
     });
   builder.setNegativeButton("취소",
     new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       // TODO Auto-generated method stub
       dialog.cancel();
      }
     });
   builder.show();
   return true;
  }
  public void setLocation(Location location) {
   this.location.add(location);
   initLoc(this.location.size());
  }
  public void addOverlayItem(OverlayItem overlay) {
   items.add(overlay);
   populate();
  }  
 }
}