我正在尝试创建一个使用Android Room作为数据库的Android应用。我已经通过它们的ID链接了两个表。如果我检查是否应该销毁父级(因为没有子级),我会遇到一个ArrayList错误,其中包含那些子级ID。我无法从父级的ArrayList中删除id整数。
IdList.contains(childId)返回false。 记录IdList中的所有整数表明IdList中的childId 是。
IdList.indexOf(childId)返回正确的值。 尝试IdList.removeAt(IdList.indexOf(childId))会引发错误,例如:java.lang.ClassCastException:java.lang.Double无法转换为java.lang.Integer
IdList.remove(childId)根本不执行任何操作(找不到childId)。
entryModel.entry.value?.let { meal ->
val parentDao = db.mealParentDao()
val parent = parentDao.findById(meal.childParentId)
parent?.let {
if (parent.childrenIds != null &&parent.childrenIds!!.size > 1) {
var location: Int? = null
parent.childrenIds?.forEachIndexed { index, i ->
if (i == meal.childId) location = index
}
if (location != null) parent.childrenIds?.removeAt(location!!)
parent.parentType?.remove(meal.childType)
parentDao.updateMealSpecies(parent)
} else parentDao.deleteById(parent.speciesId)
}
db.mealChildDao().deleteById(meal.childId)
}
我希望ArrayList没有删除的孩子的ID,但是ArrayList保持不变或使我的应用崩溃。
在此先感谢您的帮助!
答案 0 :(得分:1)
我不确定这是怎么回事,但是在处理整数时,ArrayList.remove()
存在一个众所周知的问题。
remove()
方法已重载。可以使用一个对象来删除该对象,也可以使用一个整数索引来删除该索引处的元素。当传递remove()
的整数时,即使该整数碰巧是列表的元素,它也会假定它是索引。
这可能是问题所在吗?