0
我嘗試刷新並重新繪製地圖每15秒,但我得到ConcurrentModificationException的有一個ArrayList請嘗試刷新並重新繪製地圖,堅持例外
在的onCreate
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
Log.i("MapARS", "Start MapARS Activity");
Bundle extras = getIntent().getExtras();
requestSeq = extras.getString("requestSeq");
requestLat = extras.getDouble("requestLat");
requestLng = extras.getDouble("requestLng");
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
myMapController = mapView.getController();
GeoPoint geoPointRequester = new GeoPoint((int)(requestLat*1E6),(int)(requestLng*1E6));//set Requester GeoPoint
myMapController.animateTo(geoPointRequester);
mapListOverlays = mapView.getOverlays();
drawableRequester = this.getResources().getDrawable(R.drawable.pin02);
drawableVolunteer = this.getResources().getDrawable(R.drawable.pin01);
itemizedoverlayRequester = new ARSItemizedOverlay(drawableRequester, this);
itemizedoverlayVolunteer = new ARSItemizedOverlay(drawableVolunteer, this);
OverlayItem overlayRequester = new OverlayItem(geoPointRequester, requestSeq, "");
itemizedoverlayRequester.addOverlay(overlayRequester);
mapListOverlays.add(itemizedoverlayRequester);
volunteerList = new ArrayList<Volunteer>();
updateThread = new UpdateThread();
updateThread.start();
}
這是我的線程類
public class UpdateThread extends Thread {
public void run(){
while(true) {
volunteerList.clear();
volunteerList = getRequestMemberRDetail();
drawVolunteer();
try {
sleep((long) 15000.0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private ArrayList<Volunteer> getRequestMemberRDetail() {
try {
result = RequesterService.getRequestMemberR(requestSeq);
for (int i=0;i<result.getPropertyCount();i++) {
SoapObject temp = (SoapObject) result.getProperty(i);
Volunteer volunteerDetail = new Volunteer();
volunteerDetail.member_Seq = temp.getProperty("Member_Seq").toString();
volunteerDetail.member_FirstName = temp.getProperty("Member_FirstName").toString();
volunteerDetail.member_LastName = temp.getProperty("Member_LastName").toString();
volunteerDetail.member_TelNo = temp.getProperty("Member_TelNo").toString();
volunteerDetail.member_Lat = Double.parseDouble(temp.getProperty("Member_Lat").toString());
volunteerDetail.member_Lng = Double.parseDouble(temp.getProperty("Member_Lng").toString());
volunteerList.add(volunteerDetail);
}
} catch (Exception e) {
e.printStackTrace();
}
return volunteerList;
}
private void drawVolunteer() {
for(int i=0;i<volunteerList.size();i++) {
GeoPoint tempGeoPoint = new GeoPoint((int)(volunteerList.get(i).member_Lat*1E6)
,(int)(volunteerList.get(i).member_Lng*1E6));
OverlayItem tempOverlay = new OverlayItem(tempGeoPoint, volunteerList.get(i).member_FirstName, "");
itemizedoverlayVolunteer.addOverlay(tempOverlay);
mapListOverlays.add(itemizedoverlayVolunteer);
mapView.invalidate();
}
}*/
我在谷歌找到ConcurrentModificationException,但我仍然不明白爲什麼代碼不工作
任何建議,將不勝感激。 謝謝:P
如何知道在drawVolunteer方法循環的指標? 對不起,我的啞巴:'( – Vazedias 2012-03-09 20:11:12
ohhh這是我的愚蠢問題!!現在我明白索引 – Vazedias 2012-03-09 20:14:22
如果你真的需要索引 - 你可以使用for(int i = ...),但在你的情況下,它是沒有必要 – 2012-03-09 20:18:54