为什么会收到此 CursorIndexOutOfBoundsException?

Why am getting this CursorIndexOutOfBoundsException?

我正在尝试检查某个人是否已存在于我的数据库中。

public Person personExistsInDatabase(String nickname){
    Person personToReturn = null;
    SQLiteDatabase sqliteDB = this.getReadableDatabase();
    String query = "SELECT _id, firstName, lastName FROM " + PERSON_TABLE + " WHERE nickname = '" + nickname + "'";
    Cursor cursor = sqliteDB.rawQuery(query, null);

    if(cursor.getCount() > 0){
        personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
    }

    cursor.close();
    sqliteDB.close();

    return personToReturn;
}

我得到的错误是:

android.database.CursorIndexOutOfBoundsException: Index -1 requested with a size of 1

我在这条线上得到它:

personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));

如果这个人不存在,那么我会添加他们。如果这个人确实存在,那么我会更新新信息。

你需要做

if(cursor.moveToFirst()){
    personToReturn = new Person(cursor.getInt(0), cursor.getString(1), cursor.getString(2));
}

这会将光标移动到第一个位置,还允许您检查以确保里面有东西

按照您的代码替换。

    if(cursor.moveToFirst()){ 
        personToReturn = new Person(
    cursor.getInt(cursor.getColumnIndex("your_column_name")), 
    cursor.getString(cursor.getColumnIndex("your_column_name")), 
    cursor.getString(cursor.getColumnIndex("your_column_name"))
     );
    }