0

Ceci est ma première question ici, donc si quelque chose ne va pas, dites-le. Maintenant, j'ai un public class MainMap extends MapActivity qui utilise un MyLocationListener pour l'emplacement de l'utilisateur et un HelloItemizedOverlay. Je reçois certains POI d'un fichier XML auquel je veux ajouter des marqueurs (Overlays assez basiques).ConcurrentModificationException dans MapActivity

utilisateur appuie sur un bouton, AsyncTask commence:

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(); 
} 
} 

Dégager l'MapOverlay (this.mv est un MapView):

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

Ceci est la méthode que ma connexion appelle méthode lorsque J'ai assez d'informations pour ajouter un marqueur:

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); 
} 

Cela devrait être tout le code pertinent.

Le problème est que lorsque j'ajoute les POI et agrandir la carte (ou la déplacer), j'obtiens un ConcurrentModificationException.

J'ai cherché à travers ce site en lisant des fils similaires (this one par exemple) mais je ne peux pas vraiment trouver ce que je fais de mal. Me connaissant, c'est probablement quelque chose d'évident.

Merci à l'avance,

Iarwain

Répondre

0

Cela pourrait venir du fait que addOverlayToList() est appelé à partir connect() qui est appelé dans un autre fil (doInBackground()). Seul le fil qui a initié l'interface utilisateur peut toucher ses vues.

Déplacez les appels de superposition en onPostExecute() (que vous devez remplacer) de GetPOITask.