Android AsyncTask中的ConcurrentModificationException
在循环过程中,Android AsyncTask中的ConcurrentModificationException,android,exception,android-asynctask,concurrentmodification,listiterator,Android,Exception,Android Asynctask,Concurrentmodification,Listiterator,在循环过程中,onPostExecute()方法中存在该异常问题。以前我使用foreach循环,但我读到应该使用listierator。无可救药的是,它没有把它修好。关键代码片段: public void search(final String query) { this.query = (!query.trim().isEmpty()) ? query : null; loadItemsTask2 = new AsyncTask<Void, Void, V
onPostExecute()
方法中存在该异常问题。以前我使用foreach循环,但我读到应该使用listierator
。无可救药的是,它没有把它修好。关键代码片段:
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)