Попробуйте обновить и перерисовать карту, но застряли за исключением - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь обновлять и перерисовывать карту каждые 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();
        }
    }*/

Я нахожу в Google исключение ConcurrentModificationException, но до сих пор не понимаю, почему код не работает

Любое предложение будет оценено.Спасибо: P

1 Ответ

0 голосов
/ 09 марта 2012

Попробуйте удалить

volunteerList = new ArrayList<Volunteer>();

из метода onCreate () и

public class UpdateThread extends Thread {
public void run(){

    while(true) {
        List<Volunteer> volunteerList = getRequestMemberRDetail();
        drawVolunteer(volunteerList);
        try {
            sleep((long) 15000.0);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

private ArrayList<Volunteer> getRequestMemberRDetail() {
    List<Volunteer> volunteerList = new ArrayList<Volunteer>();
    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(List<Volunteer> volunteerList) {
    for(Volunteer volunteer: volunteerList) {
        GeoPoint tempGeoPoint = new GeoPoint((int)(volunteer.member_Lat*1E6)
                                            ,(int)(volunteer.member_Lng*1E6));
        OverlayItem tempOverlay = new OverlayItem(tempGeoPoint, volunteerList.get(i).member_FirstName, "");
        itemizedoverlayVolunteer.addOverlay(tempOverlay);
        mapListOverlays.add(itemizedoverlayVolunteer);
        mapView.invalidate();
    }
}*/
...