2012-01-27 9 views
-1

GoogleMapsに複数のマーカーをAndroidで表示するコードを記述しました。私のコードは以下の通りです。AndroidのGoogleMapsでConcurrentModificationExceptionを解決する方法

List<Overlay> markersList; 
private MyItemizedOverlay funPlaces; 
Runnable r = new Runnable() { 
     public void run() { 
      if (markersList != null) { 
       MapController mc = mapView.getController(); 
       mc.setZoom(15); 
       for (int i=0; i < markersList.size(); i++) { 
        funPlaces = (MyItemizedOverlay) markersList.get(i); 
        GeoPoint pt = funPlaces.getCenterPt(); 
        mc.setCenter(pt); 
        mapView.postInvalidate(); 
       } 
      } 
     } 
    }; 
Thread t=new Thread(r,"ClassName"); 
t.start(); 

私は上記のコードを実行しているときにうまくいきますが、時にはConcurrentModificationExceptionを与えていることがあります。この問題を解決するには?どんな考えでも大歓迎です。

+7

質問を書式設定してください。あなたの質問は他の人にも役立ち、読むのは難しいです。また、[回答を受け入れる方法とその理由](http://meta.stackexchange.com/a/5235/169719)を参照することをお勧めします。 – Knickedi

+0

このRunnableを使用するときは? – Olegas

+3

どのラインに例外がありますか?スタックトレースとは何ですか? –

答えて

1

エラーが発生した場合は、反復処理の進行中にArrayListを変更することがほぼ確実です。あなたが提供したコードから、実際の並行性に起因するのか、それとも反復中のArrayListの変更を行うのかは分かりませんが、それが理由です。

+0

はい私は問題を理解していますか? – androiduser

+0

実際には失敗しているコードの部分を見ることなく、 ArrayListをイテレータ以外のもので変更しないようにコードを並べ替えるだけです。または、実際に並行性がある場合は、同時に使用するためのCopyOnWriteArrayListのようなものを使用してください。 –

関連する問題