我试图从arraylist中删除该项目,但引发并发修改异常

 listIterator = CustomListArr.iterator();
 for (ClassA value :  CustomListArr) {
    try {
        String query = "SELECT * FROM DEVICE_INFO WHERE DEV_IP='" + value.getaddress() + "'";
        String address = value.getiip();
        SQLiteDatabase db = dbController.getReadableDatabase();
        Cursor cursor1 = db.rawQuery(query, null);

        if (cursor1 != null) {
            if (cursor1.moveToFirst()) {
                do {
                    while (listIterator.hasNext()) {
                        String ss = listIterator.next().getiip();
                        if (ss.equals(ippaddress)) {
                            listIterator.remove();
                        } else {
                            System.out.println(ss);
                        }
                    }
                    CustomHotspotListArr.size();
                } while (cursor1.moveToNext());
            }
        }
    } catch (Exception e) {
        String error = e.toString();
    }
}
if (CustomListArr.size() > 1) {
    list_adapter_configure = new CustomListview(Conf_devicelist.this, R.layout.conf_items, CustomListArr);
    lv_configrue.setAdapter(list_adapter_configure);
} else if (CustomListArr.size() == 1) {
    startActivity(new Intent(getApplicationContext(), New_Activity.class));
    finish();
}  else if (CustomListArr.size() == 0){
    Toast.makeText(Conf_devicelist.this, "No New Device Found", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
    finish();
}

最佳答案

显然,这段代码创建了一个迭代器(我们称之为A):

        listIterator = CustomListArr.iterator();


但不是很明显,此代码还创建了一个迭代器(我们将其称为B):

        for (ClassA value :  CustomListArr) {


因此,发生的事情是,当您使用迭代器B遍历CustomListArr时,先读取数据库,然后开始使用迭代器A遍历CustomListArr。如果使用A删除了某些内容,则返回迭代器B的循环B注意到列表已在其后面更改,并抛出ConcurrentModificationException

我看到了对CustomHotspotListArr的引用,所以我想知道这些迭代器之一是否应该在此列表中。

这段代码有很多问题。迭代器A是在开始时创建的,因此遍历该列表不能超过一次。我什至不确定此代码应该做什么,是否删除具有特定IP地址的列表中的所有项目,或仅删除重复项。

关于android - 如何避免arraylist中的并发修改异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38971688/

10-12 04:48