0

onPostExecute()ループ中のメソッド内でその例外に問題があります。以前は foreach ループを使用していましたが、使用する必要があることを読みましたListIterator。うまくいけば、それは修正されませんでした。重要なコードの断片:

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();

    }

次の行で例外がスローされます。

for (ListIterator<LoyaltyProgramsListItem> iter = searchItems.listIterator(); iter.hasNext();) {

ログキャット:

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)
4

1 に答える 1

1

私の解決策:ループの前に配列のコピーを作成し、次にループ内でこのコピーを操作します。

于 2013-08-09T07:58:49.087 に答える