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