我在 SQLite 数据库中为我的应用程序存储了许多对象。这些对象的类有一个构造函数,该构造函数接受从 Database 类传入的 Cursor 对象。例子:
public MyClass(Cursor cursor) {
this.id = cursor.getString(cursor.getColumnIndex(MyDatabase.KEY_ROWID));
this.nickname = cursor.getString(cursor.getColumnIndex(MyDatabase.KEY_NICKNAME));
...等等。
但是我注意到,当 ID 列的 getColumnIndex 返回 -16 时,我会随机崩溃。(如果我注释掉该行,无论我尝试访问的第一列是哪一列,它也会返回 -16)。我在它周围添加了一些额外的日志记录,但它没有帮助,因为列似乎很好:
public MyClass(Cursor cursor) {
Log.i("TEST", Column names are: " + Arrays.toString(cursor.getColumnNames()));
Log.i("TEST", Making object, id column index is " + cursor.getColumnIndex(MyDatabase.KEY_ROWID));
哪个打印:
Column names are: [_id, nickname...]
Making object, id column index is -16
所以看起来一切都应该没问题,有人知道为什么在从光标读取时一切都会变得如此混乱吗?
编辑:这是我获取光标的方式,这是数据库类中的一个方法:
public MyObject getMyObject(String id) {
MyObject objectFound = null;
String[] whereArgs = { id };
Cursor cursor = db.query(true, getTableName(), null, WHERE_EQUALS, whereArgs, null, null, null, null);
if(cursor.moveToFirst()) {
//Should only return 1 entry from DB
while(cursor.isAfterLast() == false) {
objectFound = new MyObject(cursor);
cursor.moveToNext();
}
}
cursor.close();
return objectFound;
}