Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用迭代器时的java.util.ConcurrentModificationException_Java_Android - Fatal编程技术网

使用迭代器时的java.util.ConcurrentModificationException

使用迭代器时的java.util.ConcurrentModificationException,java,android,Java,Android,我有下面的代码来形成一个url,但是一些客户端在for循环中报告了异常。 java.util.ConcurrentModificationException 在java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573) List requestParams=adRequest .createRequestParamsList(view.getContext()); RequestTask currentTask=新的Request

我有下面的代码来形成一个url,但是一些客户端在for循环中报告了异常。 java.util.ConcurrentModificationException 在java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)

List requestParams=adRequest
.createRequestParamsList(view.getContext());
RequestTask currentTask=新的RequestTask(此,
view.getUserAgent(),view.getContext(),keyCode);
试一试{
currentTask.executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR,
baseRequestUrl+Request.REQ_URI,requestParams);
}捕获(例外e){
}
字符串debugUrl=“”;
已同步(此){
debugUrl=baseRequestUrl+Request.REQ_URI+“?”;
for(Iterator Iterator=requestParams.Iterator();Iterator.hasNext();){
NameValuePair nvp=iterator.next();
debugUrl=debugUrl+nvp.getName()+“=”+nvp.getValue()+“&”;
}
debugUrl=debugUrl.substring(0,debugUrl.length()-1);
}

requestParam在RequestTask中修改。为什么会失败?

在有序集上使用
迭代器时,必须使用
迭代器。删除()
而不是
在您的注释之后,我怀疑您应该在
requestParams
对象上同步,而不是在
this
上同步

异步任务没有对正在迭代的对象的引用,因此它们没有锁定同一个对象,这实际上与根本不同步是一样的

确保两个类在同一对象的同一引用上同步


PS:如果两个类都进行了同步(这一点),那么它们实际上是在不同的对象实例上进行同步。

DoWatch。避免迭代器我有点困惑,因为您没有在迭代器块内修改requestParams对象。您是否在其他线程中修改
requestParams
,在本例中称为RequestTask的异步任务中,如果在使用
迭代器对
数组列表进行迭代时修改了
数组列表
,则会得到
并发修改异常
    List<NameValuePair> requestParams = adRequest
            .createRequestParamsList(view.getContext());

    RequestTask currentTask = new RequestTask(this,
            view.getUserAgent(), view.getContext(), keyCode);

    try {
            currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,
                baseRequestUrl + Request.REQ_URI, requestParams);

    } catch (Exception e) {

    }

                String debugUrl = "";
                synchronized (this) {
                    debugUrl = baseRequestUrl + Request.REQ_URI + "?";
                    for (Iterator<NameValuePair> iterator = requestParams.iterator(); iterator.hasNext();) {
                        NameValuePair nvp = iterator.next();
                        debugUrl = debugUrl + nvp.getName() + "=" + nvp.getValue() + "&";
                    }
                    debugUrl = debugUrl.substring(0, debugUrl.length() - 1);
                }