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,我正在编写购物车代码,当我添加arraylist中的产品时,应用程序会抛出一个执行选项,我不知道为什么。这就是我现在使用的代码。有什么帮助吗 //the arraylist is not empty public static ArrayList<mercadonaProducts> mercadonaCartProducts = new ArrayList<>(); if(mercadonaCartProducts.isEmpty()){

我正在编写购物车代码,当我添加arraylist中的产品时,应用程序会抛出一个执行选项,我不知道为什么。这就是我现在使用的代码。有什么帮助吗

//the arraylist is not empty

public static ArrayList<mercadonaProducts> mercadonaCartProducts = new ArrayList<>();


if(mercadonaCartProducts.isEmpty()){
               mercadonaCartProducts.add(new mercadonaProducts(product_name.getText().toString(),price.getText().toString().substring(7,11),String.valueOf(count[0]),String.valueOf(Double.parseDouble(price.getText().toString().substring(7,11))*count[0])));
                        saveCart(v);
                    }else{
                        for(mercadonaProducts product : mercadonaCartProducts){
                            if(product.getCartproduct_name().equals(product_name.getText().toString())){
                                product.setQty(String.valueOf(Integer.parseInt(product.getQty())+count[0]));
                                product.setTotalprice(Double.parseDouble(product.getQty())*product.getCartprice());
                                saveCart(v);
                            }else{
                                mercadonaCartProducts.add(new mercadonaProducts(product_name.getText().toString(),price.getText().toString().substring(7,11),String.valueOf(count[0]),String.valueOf(Double.parseDouble(price.getText().toString().substring(7,11))*count[0])));
                                saveCart(v);
                            }
                        }
                    }
//arraylist不是空的
公共静态ArrayList=new ArrayList();
if(mercadonartproducts.isEmpty()){
添加(新的MercadonarProducts(product_name.getText().toString(),price.getText().toString().substring(7,11),String.valueOf(count[0]),String.valueOf(Double.parseDouble(price.getText().toString().substring(7,11))*count[0]);
储蓄车(v);
}否则{
适用于(Mercadona产品产品:mercadonaCartProducts){
if(product.getCartproduct_name().equals(product_name.getText().toString())){
product.setQty(String.valueOf(Integer.parseInt(product.getQty())+count[0]);
product.setTotalprice(Double.parseDouble(product.getQty())*product.getCartprice());
储蓄车(v);
}否则{
添加(新的MercadonarProducts(product_name.getText().toString(),price.getText().toString().substring(7,11),String.valueOf(count[0]),String.valueOf(Double.parseDouble(price.getText().toString().substring(7,11))*count[0]);
储蓄车(v);
}
}
}
这里

您正在迭代MercadonartProducts的产品

在您调用的else分支的循环中

mercadonaCartProducts.add(new mercadonaProducts(...));
因此,在迭代列表的同时,您也在列表中添加新元素

要避免ConcurrentModificationException,请将for指令更改为

ArrayList<mercadonaProducts> mercadonaCartProductsCopy = new ArrayList(mercadonaCartProducts);
for (mercadonaProducts product : mercandonaCartproductsCopy) {
ArrayList mercadonartproductscopy=新的ArrayList(mercadonartproducts);
适用于(麦卡多纳产品:麦卡多纳产品){

如果不涉及并发,这就足够了。

我不这么认为,我不想使用迭代器,因为我想修改arraylist中该位置的对象数据,迭代器我做不到,我想你在迭代时添加到
MercadonartProducts
。这是不允许的。你的意思是在for each声明中e(mercadonaProducts产品:mercadonaCartProducts)的
{
用于(mercadonaProducts产品:新ArrayList(mercadonaCartProducts)){??我认为这行不通不?我的意思是foreach会抛出一个错误,因为它需要一个对象,而该声明不需要work@maarcoscuesta18您能报告将抛出的错误吗?使用您的代码
for(mercadonaProducts:new ArrayList(mercadonaCartProducts)){
显示此-->所需类型:提供的对象:mercadonaProducts@maarcoscuesta18你说得对,我更新了answer@maarcoscuesta18:您只需要
新建ArrayList(…)
即可。请避免。
ArrayList<mercadonaProducts> mercadonaCartProductsCopy = new ArrayList(mercadonaCartProducts);
for (mercadonaProducts product : mercandonaCartproductsCopy) {