안녕하세요 안드로이드 3.2에서이 오류를 얻을 내 코드를 가리 키지 않는, 그래서 난이는에이 ConcurrentModificationException를 해결할 수없는 안드로이드
05-07 18:08:36.960: E/AndroidRuntime(12435): FATAL EXCEPTION: main
05-07 18:08:36.960: E/AndroidRuntime(12435): java.util.ConcurrentModificationException
05-07 18:08:36.960: E/AndroidRuntime(12435): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
05-07 18:08:36.960: E/AndroidRuntime(12435): at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:44)
05-07 18:08:36.960: E/AndroidRuntime(12435): at com.google.android.maps.MapView.onDraw(MapView.java:530)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.View.draw(View.java:9304)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.drawChild(ViewGroup.java:2586)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.drawChild(ViewGroup.java:2584)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.drawChild(ViewGroup.java:2584)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.drawChild(ViewGroup.java:2584)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.View.draw(View.java:9307)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.widget.FrameLayout.draw(FrameLayout.java:419)
05-07 18:08:36.960: E/AndroidRuntime(12435): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2076)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewRoot.draw(ViewRoot.java:1706)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewRoot.performTraversals(ViewRoot.java:1420)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.view.ViewRoot.handleMessage(ViewRoot.java:2066)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.os.Handler.dispatchMessage(Handler.java:99)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.os.Looper.loop(Looper.java:132)
05-07 18:08:36.960: E/AndroidRuntime(12435): at android.app.ActivityThread.main(ActivityThread.java:4126)
05-07 18:08:36.960: E/AndroidRuntime(12435): at java.lang.reflect.Method.invokeNative(Native Method)
05-07 18:08:36.960: E/AndroidRuntime(12435): at java.lang.reflect.Method.invoke(Method.java:491)
05-07 18:08:36.960: E/AndroidRuntime(12435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
05-07 18:08:36.960: E/AndroidRuntime(12435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
05-07 18:08:36.960: E/AndroidRuntime(12435): at dalvik.system.NativeStart.main(Native Method)
그러나 이것은이다 해결하는 방법을 모른다 오류가 발생하는 코드
protected ItemizedOverlay<OverlayItem> doInBackground(Void... params) {
...
synchronized (this.mapView) {//ConcurrentModificationException
if (!this.isCancelled())
{
for (Object element : this.mapView.getOverlays()) {
Overlay o = (Overlay) element;
if (o instanceof GestionaleItemizedOverlay)
{
this.mapView.getOverlays().remove(o);//this one
}
}
if (overlay.size() > 0)
{
this.mapView.getOverlays().add(overlay);//or this one
}
}
}
...
}
내 코드를 수정하려면 어떻게해야합니까?
'List'가 동기화되지 않았기 때문에'synchronized'를 사용해야한다고 생각합니다. –
syncronized (this.mapView)를 사용하는 것으로 충분하지 않습니까? 더하기 this.mapView.getOverlays() 반환 값 : 오버레이 목록. 이것은 Collections.synchronizedList (java.util.List)를 통해 실행되었습니다. 따라서 자유롭게 질문하거나 수정할 수 있으며 변경 사항은 다음 무승부 또는 이벤트에 반영됩니다. 그러나 반복을 반복하면 전체 루프가 목록에서 동기화되는 블록으로 묶여 야합니다. – max4ever