运行此查询以从内部Android数据库获取数据并分配给游标:
Cursor cursor = db.query(TABLE_NAME,
new String[] { KEY_ID, KEY_NAME, KEY_SURNAME },
KEY_ID + "=?",
new String[] { String.valueOf(name) }, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Record rec = new Record(cursor.getString(0), cursor.getString(1), cursor.getString(2));
应用程序在执行此代码时崩溃。
例外:CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
。
这可能是由于KEY_ID中没有值,因为我在运行此方法之前没有添加任何行吗?
答案 0 :(得分:1)
没有。 query()
不应该杀死该应用。但是如果出现问题那么它就会抛出你很可能没有抓到的异常,这会杀死你的应用程序。我总是检查a)logcat输出的崩溃堆栈跟踪或后续行 - 你可能只是假设总是返回数据并尝试访问它导致崩溃。
您应该始终检查您的查询是否返回了任何内容,例如:
Cursor cursor = mDb.query(....);
if( cursor.getCount() > 0 ) {
cursor.moveToFirst();
.....
}
或只是
Cursor cursor = mDb.query(....);
if( cursor.moveToFirst() ) {
.....
}
因为您可以轻松获得有效的非null
游标,该游标不包含任何数据(返回零行)。尝试从此类游标访问非现有数据将导致抛出异常(如果未捕获异常则崩溃)。
修改强>
尝试捕获异常,然后查看logcat的罪魁祸首:
try {
Cursor cursor = mDb.query(....);
if( cursor.moveToFirst() ) {
.....
}
} catch ( Exception e ) {
e.printStackTrace();
}