I have a problem with that exception inside onPostExecute()
method during loop. Previously I used foreach loop, but I read that I should use ListIterator
. Hopelessly it didn't fixed it. Fragment of critical code:
public void search(final String query) {
this.query = (!query.trim().isEmpty()) ? query : null;
loadItemsTask2 = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
...
}
@Override
protected void onPostExecute(Void result) {
progress.setVisibility(View.GONE);
lView.setVisibility(View.VISIBLE);
adapter.clear();
for (ListIterator<LoyaltyProgramsListItem> iter = searchItems.listIterator(); iter.hasNext();) {
LoyaltyProgramsListItem si = iter.next();
adapter.add(si);
}
adapter.notifyDataSetChanged();
}
};
loadItemsTask2.execute();
}
Exception throws in this line:
for (ListIterator<LoyaltyProgramsListItem> iter = searchItems.listIterator(); iter.hasNext();) {
Logcat:
08-08 15:26:40.069 18277-18277/******* E/AndroidRuntime: FATAL EXCEPTION: main
java.util.ConcurrentModificationException
at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
at pl.freebee.android.ui.fragments.LoyaltyProgramsListFragment$4.onPostExecute(LoyaltyProgramsListFragment.java:328)
at pl.freebee.android.ui.fragments.LoyaltyProgramsListFragment$4.onPostExecute(LoyaltyProgramsListFragment.java:289)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
My solution: Making copy of array before loop and then inside loop operate on this copy.