当我调用getNode()方法时,程序抛出异常
public Cursor getNote(long rowId) throws SQLException {
Cursor cursor = Db.query(TABLE_NAME, new String[] { COLUMN_ID,
COLUMN_TITLE, COLUMN_BODY }, COLUMN_ID + "=" + rowId, null,
null, null, null, null);
if(cursor !=null){
cursor.moveToFirst();
}
return cursor;
}
这是例外。这不是完全例外。
07-03 06:46:02.161: E/AndroidRuntime(2556): FATAL EXCEPTION: main
07-03 06:46:02.161: E/AndroidRuntime(2556): Process: com.vahe_muradyan.notes, PID: 2556
07-03 06:46:02.161: E/AndroidRuntime(2556): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vahe_muradyan.notes/com.vahe_muradyan.notes.MainActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
这是notes.db文件
答案 0 :(得分:2)
您应该像{<1}}一样检查
cursor.moveToFirst();
尝试以这种方式从[{1}}获取if(cursor.moveToFirst()){
//data found
}
else{
//No data
}
方法DB
.rawQuery(.....)
答案 1 :(得分:1)
您的光标似乎是空的。所以不要检查空游标尝试检查 -
if(cursor.getCount() > 0)
{
//do stuff
}
else
{
//Empty cursor
}
然后检查控件的去向 - 进入if condition
或else condition
。
<强>更新强>:
由于cursor.getCount()返回0,因此光标中没有数据。
要获取数据,您可以执行以下操作 -
Cursor cursor = Db.query(TABLE_NAME, new String[] { COLUMN_ID,
COLUMN_TITLE, COLUMN_BODY }, COLUMN_ID + "= 2", null,
null, null, null, null);
注意:
rowid = 2
是表TABLE_NAME
中的行ID。您可以查看此表格,看看此表格的rowid
是什么,并将其替换为2
。
问题是因为您的动态rowid
与您的任何表rowid
都不匹配。
插图 -
| _ID | TITLE | NOTES |
--------------------------------------------------
| 1 | jsush | ----- |
--------------------------------------------------
| 2 | jsushshai | ----- |
--------------------------------------------------
查看表格,很明显,您只有两个rowid
值1
和2
。
因此,如果您的查询与其rowid
中的任何值都不匹配,则光标将为空。
您在方法getNote(long rowId)
中传递了rowid值,该方法与任何表rowid都不匹配。
类似的情况在这里你可以寻求更多的帮助 -
cursorindexoutofboundsexception-index-0-requested-with-a-size-of-0
<强>更新强>
试试这个 -
public Cursor getNote(long rowId) throws SQLException {
Cursor cursor = Db.query("notes", new String[] { "_ID",
"TITLE", "NOTES"}, "_ID=1", null,
null, null, null, null);
cursor.moveToFirst();
if(cursor.getCount() > 0)
{
//do stuff
}
else
{
//Empty cursor
}
return cursor;
}
答案 2 :(得分:0)
使用:
while (mCursor.moveToNext()) {
// YOUR CODE HERE
}
这是到目前为止安全迭代android中游标的最佳方法,并确保你不会得到CursorIndexOutOfBoundsException
。