1
我想迭代通過散列表,並在我的迭代過程中使用密鑰。我決定在異步任務中使用它,因爲迭代阻塞了我的UI線程。迭代通過hasmap和使用鍵值
我的散列表的LatLng作爲Key和一個Marker作爲Object,當我在迭代過程中得到密鑰並將它傳遞給一個新的LatLng時,它工作正常,但是當我嘗試使用這個新的LatLng時,我得到一個java.util.ConcurrentModificationException
異常。奇怪的是,當我使用的代碼沒有的AsyncTask
這種情況不會發生在這裏是我的代碼
class AddCityMarker extends AsyncTask<Integer, Integer, String> {
protected String doInBackground(Integer... counter) {
//CityMarker cMarker;
LatLng marker_loc;
List<String> city_markers = new ArrayList<String>();
if(displayed.size() > 0){
Iterator<HashMap.Entry<LatLng, Marker>> myIterator = displayed.entrySet().iterator();
while(myIterator.hasNext()) {
//cMarker = new CityMarker();
HashMap.Entry<LatLng, Marker> entry = myIterator.next();
marker_loc = entry.getKey();
Log.i("ZOOM", "Key = " + marker_loc + ", Value = " + entry.getValue());
List<Address> addresses = null;
try {
//This is where I get the error
addresses = gcode.getFromLocation(marker_loc.latitude, marker_loc.longitude, 1);
} catch (IOException e) {
e.printStackTrace();
}
if(addresses.size() > 0) {
if(!city_markers.contains(addresses.get(0).getLocality())){
city_markers.add(addresses.get(0).getLocality());
//map.addMarker(new MarkerOptions().position(marker_loc).snippet("CITY"));
}
}
}
}
return null;
}
protected void onPostExecute(String jsonResult) {
try {
if(isClubMarkers){
map.clear();
isClubMarkers = false;
}
displayed.clear();
} catch (Exception e) {
e.printStackTrace();
}
}
}
gcode.getFromLocation會怎樣?你修改了display.entrySet()嗎? – IronBCC
不,我不修改PostExecute上的所有execept。我只是使用Key的值在地圖上放置標記 – Amanni
「將標記放置在地圖上」,它最後修改了displayed.entrySet()。 – IronBCC