IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Concurrent Modification Exception


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut Concurrent Modification Exception
    Bonjour, dans un thread je fais d'abord

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    	private void AfficherParcours(){
     
    		methodePointsTest();
     
                	for (int i=0;i<ListeDesPoints.size()-9;i=i+9){
     
                        float fromLat = (Float) ListeDesPoints.get(i+1), fromLon = (Float) ListeDesPoints.get(i+2), toLat = (Float) ListeDesPoints.get(i+10), toLon = (Float) ListeDesPoints.get(i+11);
                        String url = RoadProvider
                                        .getUrl(fromLat, fromLon, toLat, toLon);
                        InputStream is = getConnection(url);
                        mRoad = RoadProvider.getRoute(is);
     
                        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                        listOfOverlays = mapView.getOverlays();
                        listOfOverlays.add(mapOverlay);
     
     
                       /* String url2 = RoadProvider
                        .getUrl(fromLat+1, fromLon+1, toLat+1, toLon+1);
                        InputStream is2 = getConnection(url2);
                        mRoad2 = RoadProvider.getRoute(is2); */
     
                	}
    	}
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    	Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
     
               // MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
                //MapOverlay mapOverlay2 = new MapOverlay(mRoad2, mapView);
     
                //listOfOverlays = mapView.getOverlays();
                //listOfOverlays.clear();
                //listOfOverlays.add(mapOverlay);
                //listOfOverlays.add(mapOverlay2);
                //mapView.invalidate();
                mapView.invalidate();
        };
    };
    Dans le DDMS j'ai ça comme erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    06-07 10:14:41.499: ERROR/AndroidRuntime(8396): Uncaught handler: thread main exiting due to uncaught exception
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396): java.util.ConcurrentModificationException
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at com.google.android.maps.MapView.onDraw(MapView.java:494)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.view.View.draw(View.java:6591)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
    06-07 10:14:41.539: ERROR/AndroidRuntime(8396):     at android.widget.FrameLayout.draw(FrameLayout.java:352)
    ..
    Pouvez-vous me dire d'où ça vient.. ?

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    L'erreur vient du faite que tu essaye de modifier / accéder à un objet à partir de deux threads différents au même moment.

  3. #3
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Par défaut
    Le mieux pour résoudre ton problème va être de synchroniser tes procédures qui accèdent à un même objet avec le mot clé "synchronized", ou d'une autre façon de ton choix.

    Tu trouveras ici des TPs sur le sujet :
    https://info.enstb.org/enseignement/...jour/cours.pdf
    http://www.infres.enst.fr/~domas/TP-Java-Conc-2.html

    Bonne continuation.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Je comprends pas où j'accéde à la même ressource en même temps.. :O

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Quand mapView.invalidate(); est appelé, il utilise les éléments contenu dans son adapter "SimpleListIterator.next" mais dans la méthode afficherParcours des éléments sont rajoutés à l'adapter "listOfOverlays.add(mapOverlay);" de ce fait l'iterator change est provoque une erreur de concurrence, je pense que c'est ça.

    L'erreur de concurrence sur les iterator/liste est un grand classique.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 140
    Par défaut
    Merci, bon j'ai changé de manière de faire, ça fonctionne. Merci quand même les gars.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POO] Exception, modification du message d'erreur
    Par gege2061 dans le forum Langage
    Réponses: 1
    Dernier message: 30/08/2007, 16h52
  2. concurrent modification exception
    Par Virgile le chat dans le forum Langage
    Réponses: 2
    Dernier message: 18/06/2007, 09h47
  3. Réponses: 3
    Dernier message: 13/06/2007, 14h50
  4. [VB.NET][2.0]traiter une Concurrency exception
    Par Golzinne dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/03/2006, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo