当我尝试使用此功能从我的数据库中获取数据时,我收到错误(我正在使用kotlin与android studio)

问题描述 投票:0回答:1
fun readChore(id:Int):Chore{
     val db:SQLiteDatabase=writableDatabase

    val cursor:Cursor=db.query(TABLE_NAME,arrayOf(KEY_ID,KEY_CHORE_ASSIGNED_TO, KEY_CHORE_ASSIGNED_BY,
               KEY_CHORE_ASSINED_TIME),KEY_ID+"=?",arrayOf(id.toString()),
               null,null,null,null)

    Log.d("position",cursor.position.toString())

    cursor.moveToFirst()

    val chore=Chore(
            cursor.getString(cursor.getColumnIndex(KEY_CHORE_NAME)),
            cursor.getString(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_TO)),
            cursor.getString(cursor.getColumnIndex(KEY_CHORE_ASSIGNED_BY)),
            cursor.getLong(cursor.getColumnIndex(KEY_CHORE_ASSINED_TIME))
    )

    return chore
}

但我得到的只是一个错误_saying ...“无法从CursorWindow读取第0行,第1列,其中包含1行,4列。”

android android-studio kotlin android-sqlite sqliteopenhelper
1个回答
1
投票

您必须将KEY_CHORE_NAME添加到选定的行

val cursor:Cursor=db.query(TABLE_NAME,arrayOf(KEY_ID, KEY_CHORE_NAME ,KEY_CHORE_ASSIGNED_TO, KEY_CHORE_ASSIGNED_BY,
           KEY_CHORE_ASSINED_TIME),KEY_ID+"=?",arrayOf(id.toString()),
           null,null,null,null)

对于将来的调试,您可以使用Databaseutils.dumpCursor()查看光标的内容,否则很难看到。

另外不要忘记在return语句之前关闭游标cursor.close()

© www.soinside.com 2019 - 2024. All rights reserved.