Pregunta

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)
¿Fue útil?

Solución

My solution: Making copy of array before loop and then inside loop operate on this copy.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top