Reputation: 3257
I have an Android Google Maps app that I'm debugging through Eclipse. I'm getting this error:
12-14 16:19:50.106: E/AndroidRuntime(2487): FATAL EXCEPTION: main
12-14 16:19:50.106: E/AndroidRuntime(2487): java.util.ConcurrentModificationException
12-14 16:19:50.106: E/AndroidRuntime(2487): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
12-14 16:19:50.106: E/AndroidRuntime(2487): at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:41)
12-14 16:19:50.106: E/AndroidRuntime(2487): at com.google.android.maps.MapView.onDraw(MapView.java:494)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.View.draw(View.java:6740)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.View.draw(View.java:6743)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.widget.FrameLayout.draw(FrameLayout.java:352)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.drawChild(ViewGroup.java:1640)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.drawChild(ViewGroup.java:1638)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1367)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.View.draw(View.java:6743)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.widget.FrameLayout.draw(FrameLayout.java:352)
12-14 16:19:50.106: E/AndroidRuntime(2487): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1842)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewRoot.draw(ViewRoot.java:1407)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewRoot.performTraversals(ViewRoot.java:1163)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.os.Looper.loop(Looper.java:123)
12-14 16:19:50.106: E/AndroidRuntime(2487): at android.app.ActivityThread.main(ActivityThread.java:4627)
12-14 16:19:50.106: E/AndroidRuntime(2487): at java.lang.reflect.Method.invokeNative(Native Method)
12-14 16:19:50.106: E/AndroidRuntime(2487): at java.lang.reflect.Method.invoke(Method.java:521)
12-14 16:19:50.106: E/AndroidRuntime(2487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
12-14 16:19:50.106: E/AndroidRuntime(2487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-14 16:19:50.106: E/AndroidRuntime(2487): at dalvik.system.NativeStart.main(Native Method)
I never explicitly use an iterator (my code has none, although obviously some call includes one), and I've made sure that any sort of list is only accessed through what is returned from Collections.synchronizedList
, which should have solved this, to my limited understanding. As I have no idea what in my code base would cause this, I can't really post code snippets. Does anyone know other "normal" causes? Or how to get any meaningful location from the logcat printout (to what I can tell, the only files references are library files)?
Upvotes: 0
Views: 201
Reputation: 1006724
I'm assuming it's autogenerated or library code?
It is library code.
What might I be doing that would cause a problem for code I didn't write?
You are modifying a collection in a background thread that is being iterated over in the main application thread, such as by adding or removing an overlay in a background thread.
Unfortunately, neither the classic nor the V2 version of Google Maps APIs for Android are open source, so it is difficult to tell from the stack trace what is going on precisely. My guess is that you are adding or removing overlays in a background thread.
Upvotes: 2