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