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

时间:2017-08-29 08:47:21

标签: java android sqlite kotlin kotlin-android-extensions

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

这是工作 java代码,当我在listview上点击它时,我会通过该代码获取注释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无法强制转换为   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中一切都很顺利。

1 个答案:

答案 0 :(得分:0)

如果您希望fun getAllTitles(): ArrayList<Cursor>返回getItemAtPosition()

,则Cursor应为string Value =""; foreach (List<string> val in L1) { Value = Value + string.Join(",", val) + " // "; }