0

這是我的第一個問題,所以如果有什麼不對,請告訴。MapActivity中的ConcurrentModificationException

現在,我有一個public class MainMap extends MapActivity它使用MyLocationListener爲用戶的位置和HelloItemizedOverlay。 我從一個XML文件中獲取某些POI,我想添加標記(漂亮的基本Overlays)。

用戶按下一個按鈕,啓動的AsyncTask:

private class GetPOITask extends AsyncTask<String, Void, Void> { 

protected Void doInBackground(String... params) { 
    clearMapOverlay(); 
    if(!isBusyAddingOverlays) 
    { 
     connect(params[0]); 
    } 
    return null; 
} 

protected void onPreExecute() { 
    clearMapOverlay(); 
} 
} 

清除出MapOverlay(this.mv是一個MapView):

public void clearMapOverlay() 
{ 
    this.mv.getOverlays().remove(placesItemizedOverlay); 
    this.mv.postInvalidate(); 
    this.mv.getOverlays().add(myLoc); 
} 

這是我的連接,方法調用方法時我有足夠的信息添加標記:

private void addOverlayToList(int id, GeoPoint point, String title, String description) 
{ 
//Log.e("Debug", "Adding overlay"); 
placesItemizedOverlay.addOverlay(new POIOverlay(id, point, title, description)); 
this.mv.getOverlays().add(placesItemizedOverlay); 
} 

這應該是所有相關的代碼。

問題是,當我添加POI的縮放地圖(或移動它)時,我得到ConcurrentModificationException

我已經通過這個網站搜索,閱讀類似的線程(例如this one),但我不能真正找到我做錯了什麼。

瞭解自己,這可能是明顯的。

由於提前,

iarwain

回答

0

這可能來自於以下事實:addOverlayToList()connect()被稱爲在不同的線程(doInBackground())調用。只有啓動UI的線程才能觸及其視圖。

將附加覆蓋呼叫移動到onPostExecute()(您應該覆蓋)GetPOITask