将值插入数据库时出现光标越界异常-Android
我试图将光标中的值插入数据库,但出现错误 我是这样做的-将值插入数据库时出现光标越界异常-Android,android,database,sqlite,Android,Database,Sqlite,我试图将光标中的值插入数据库,但出现错误 我是这样做的- Cursor getUserDrinks = myDbHelper.getUserDrinks(); if(getUserDrinks != null) { if (getUserDrinks.moveToFirst()){ do{ ContentValues initialValues = new ContentValues()
Cursor getUserDrinks = myDbHelper.getUserDrinks();
if(getUserDrinks != null)
{
if (getUserDrinks.moveToFirst()){
do{
ContentValues initialValues = new ContentValues();
initialValues.put("code", getUserDrinks.getInt(getUserDrinks.getColumnIndex("code")));
initialValues.put("imgstr", getUserDrinks.getString(getUserDrinks.getColumnIndex("imgstr")));
initialValues.put("name", getUserDrinks.getString(getUserDrinks.getColumnIndex("name")));
initialValues.put("alc", getUserDrinks.getDouble(getUserDrinks.getColumnIndex("alc")));
initialValues.put("user", 1);
try {
myDataBase.beginTransaction();
myDataBase.insert("drinks", null, initialValues);
myDataBase.setTransactionSuccessful();
}
finally {
myDataBase.endTransaction();
}
}while(getUserDrinks.moveToNext());
}
}
但它给了我一个粗略的IndexOutofBoundsException。这是日志-
04-30 13:22:35.363: ERROR/AndroidRuntime(19161): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.alco/android.alco.main}: android.database.CursorIndexOutOfBoundsException: Index 2 requested, with a size of 2
我知道光标不是空的
我做错了什么?问题是
moveToNext()
返回false
,而您已经定位在最后一个元素之后,并且希望继续。有效位置的范围是从-1到elementCount
包括在内,因此最后一个位置是合法的,但没有元素。如果光标有两个位置,这就是代码中实际发生的情况:
moveToFirst()
,光标位于索引为0的第一个元素moveToNext()
。移动成功后,您将位于索引1处moveToNext()
。移动成功后,您将位于索引2,该索引超出最后一个元素cursor.moveToFirst();
while (!cursor.isAfterLast()) {
//Read the contents
cursor.moveToNext(); //Advance to the next element
}
出于某种原因,它无法识别Java代码。如果有人能帮我修一下,我会很感激的,因为我做不好。谢谢如果你想让文本像代码一样处理,你必须在每行的开头加上四个空格。谢谢,这部分奏效了。我现在没有收到错误,但由于某些原因,该值没有插入到数据库中。程序只是继续运行,没有显示错误,但是由于某种原因没有输入值……我想这是另一个问题的主题,现在没有足够的信息来回答它。这部分代码对我来说似乎很好,问题可能出在其他地方。我不确定这是一个不同的问题,因为它仍然没有插入值。事实上没有太多,我没有更多的信息可以提供。我真的不知道在这里该怎么做,因为插入在应用程序的其他部分可以很好地工作。我提到了一个新问题,因为最初的问题基本上是如何正确地遍历游标的内容。至于关于不工作插入的新问题,我不知道表的结构,它们的内容,或者如何检查是否插入了内容。首先应该检查
myDataBase.insert()返回的内容。此外,也不需要显式地启动和结束事务,这只有在一个事务中执行多个操作时才有意义。