Kotlin android 数据库:无法将 java.lang.String 转换为 android.database.Cursor

Kotlin android database: cannot cast java.lang.String to android.database.Cursor

我正在 Kotlin 中为 Android 开发一个简单的笔记应用程序,它使用一个简单的 sqlite 数据库。 我已经用 java 写过了,但现在我在 Kotlin 中遇到了一些问题,尤其是一行代码。

这是 working java 代码,当我在列表视图中单击它时,我通过它获取笔记 ID。

itemCursor = (Cursor) activity.listView.getItemAtPosition(position);
noteID = itemCursor.getInt(itemCursor.getColumnIndex(DBHelper.NOTES_COLUMN_ID));
itemCursor = helper.getNote(noteID);

那么这应该是 Kotlin 代码:

var itemCursor: Cursor = activity.listView.getItemAtPosition(position) as Cursor  **(error here on this line, look below for it)**
var noteID: Int = itemCursor.getInt(itemCursor.getColumnIndex(COLUMN_ID))
itemCursor = helper.getNote(noteID)

java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor

ListView 适配器:

list_titles = helper.getAllTitles()
lv_adapter = ArrayAdapter(activity, android.R.layout.simple_list_item_1, list_titles)
v.listview.adapter = lv_adapter

getAllTitles 有趣:

fun getAllTitles(): ArrayList<String> {

    val db = this.readableDatabase
    var titles = ArrayList<String>()

    db.select(TABLE_NAME).parseList(object : MapRowParser<List<String>> {

        override fun parseRow(columns: Map<String, Any?>): ArrayList<String> {


            val obj = columns.getValue(COLUMN_OBJ).toString()

            titles.add(obj)

            return titles
        }
    })


    return titles

}

我不明白为什么在 Kotlin 中它会给我这个 ClassCastException 错误,因为在 Java 中一切顺利。

你的fun getAllTitles(): ArrayList<String>应该是fun getAllTitles(): ArrayList<Cursor>如果你想要getItemAtPosition()到return一个Cursor