我正在尝试从从SQLite DB填充的RecyclerView列表中删除项目并收到此错误:
java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
我正在尝试使用的代码是处理未从SQLite数据库填充的数据,但在这种情况下,它会在长时间点击时崩溃。这是我的代码:
@Override
public void onBindViewHolder(RecHolder holder, final int position) {
final Todo item = listData.get(position);
final int currentPosition = position;
final Todo infoData = listData.get(position);
holder.container.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
removeData(infoData);
return true;
}
});
}
private void removeData(Todo infoData) {
int position = dbTodo.indexOf(infoData);
dbTodo.remove(position);
notifyItemRemoved(position);
}
任何人都可以帮我吗?
解
我在db.Todo
中搞砸了这个removeData()
,它应该是listData
,就像inicialisation一样。
答案 0 :(得分:0)
该错误表示在infoData
中找不到dbTodo
- 因此indexOf
返回-1
,因此在您的后续行中,您会删除索引{{ 1}}(显然是出界的)。要消除此错误,您必须在尝试删除它之前检查-1
是否存在。
infoData
我希望这会对你有所帮助。
答案 1 :(得分:0)
很明显,您尝试用来获取项目的位置不正确。
dbTodo.indexOf(infoData)
如果找不到infoData对象,则返回-1,因此您必须选择: 1)在尝试从数据库中删除对象之前检查位置
if(position >= -1){
dbTodo.remove(position);
......
2)在尝试删除之前检查infoData是否真的在数据库中。