Den*_*ata 5 sqlite android android-cursor kotlin
我在 Android Studio 中收到与光标有关的错误。
\n我的代码中有以下行
\nval dataText = cursor.getString(cursor.getColumnIndex(MyDbNameClass.COLUMN_NAME_TITLE))\n我尝试使用cursor.getColumnIndexOrThrow(),但它没有帮助\n我是android新手,希望你能帮助我。这是我的代码。
\n活动主文件
\n<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:layout_width="match_parent"\n    android:layout_height="match_parent"\n    tools:context=".MainActivity">\n\n    <TextView\n        android:id="@+id/tvTest"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:text="Hello World!"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintLeft_toLeftOf="parent"\n        app:layout_constraintRight_toRightOf="parent"\n        app:layout_constraintTop_toTopOf="parent" />\n\n    <EditText\n        android:id="@+id/edTitle"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:ems="10"\n        android:inputType="textPersonName"\n        android:text="Name"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toEndOf="parent"\n        app:layout_constraintHorizontal_bias="0.437"\n        app:layout_constraintStart_toStartOf="parent"\n        app:layout_constraintTop_toTopOf="parent"\n        app:layout_constraintVertical_bias="0.071" />\n\n    <EditText\n        android:id="@+id/edDesc"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:ems="10"\n        android:inputType="textPersonName"\n        android:text="Name"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toEndOf="parent"\n        app:layout_constraintHorizontal_bias="0.437"\n        app:layout_constraintStart_toStartOf="parent"\n        app:layout_constraintTop_toTopOf="parent"\n        app:layout_constraintVertical_bias="0.166" />\n\n    <Button\n        android:id="@+id/button"\n        android:layout_width="wrap_content"\n        android:layout_height="wrap_content"\n        android:onClick="onClickSave"\n        android:text="Button"\n        app:layout_constraintBottom_toBottomOf="parent"\n        app:layout_constraintEnd_toEndOf="parent"\n        app:layout_constraintHorizontal_bias="0.498"\n        app:layout_constraintStart_toStartOf="parent"\n        app:layout_constraintTop_toTopOf="parent"\n        app:layout_constraintVertical_bias="0.796" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>\nMainActivity.kt
\npackage com.example.todo\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.EditText\nimport android.widget.TextView\nimport com.example.todo.db.MyDbManager\n\nclass MainActivity : AppCompatActivity() {\n\n    val myDbManager = MyDbManager(this)\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n    }\n    fun onClickSave(view: View) {\n        val edTitle = findViewById<EditText>(R.id.edTitle)\n        val edDesc = findViewById<EditText>(R.id.edDesc)\n        val tvTest = findViewById<TextView>(R.id.tvTest)\n        tvTest.text = ""\n        myDbManager.openDb()\n        myDbManager.insertToDb(edTitle.text.toString(), edDesc.text.toString())\n        val dataList = myDbManager.readDbData()\n        for (item in dataList) {\n            tvTest.append(item)\n            tvTest.append("\\n")\n        }\n    }\n    override fun onDestroy() { //\xd0\xbf\xd1\x80\xd0\xb8 \xd0\xb2\xd1\x8b\xd1\x85\xd0\xbe\xd0\xb4\xd0\xb5 \xd1\x81 \xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd0\xb2\xd0\xb8\xd1\x82\xd0\xb8\n        super.onDestroy()\n        myDbManager.closeDb()\n    }\n}\nMyDbNameClass.kt
\npackage com.example.todo.db\n\nimport android.provider.BaseColumns\n\nobject MyDbNameClass: BaseColumns {\n    const val TABLE_NAME = "info"\n    const val COLUMN_NAME_TITLE = "title"\n    const val COLUMN_NAME_DESC = "desc"\n\n    const val DATABASE_VERSION = 1\n    const val DATABASE_NAME = "ToDoDb.db"\n\n    const val CREATE_TABLE = "CREATE TABLE $TABLE_NAME (" +\n            "${BaseColumns._ID} INTEGER PRIMARY KEY, $COLUMN_NAME_TITLE TEXT, $COLUMN_NAME_DESC TEXT)"\n    const val SQL_DELETE_TABLE = "DROP TABLE IF EXISTS $TABLE_NAME"\n}\nMyDbHelper.kt
\npackage com.example.todo.db\n\nimport android.content.ContentValues\nimport android.content.Context\nimport android.database.Cursor\nimport android.database.sqlite.SQLiteDatabase\nimport android.database.sqlite.SQLiteOpenHelper\nimport android.provider.BaseColumns\n\nclass MyDbHelper(context: Context) : SQLiteOpenHelper(context, MyDbNameClass.DATABASE_NAME, null, MyDbNameClass.DATABASE_VERSION) {\n    override fun onCreate(db: SQLiteDatabase?) {\n        db?.execSQL(MyDbNameClass.CREATE_TABLE)\n    }\n\n    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {\n        db?.execSQL(MyDbNameClass.SQL_DELETE_TABLE)\n        onCreate(db)\n    }\n}\nMyDbManager.kt(此处错误)
\npackage com.example.todo.db\n\nimport android.content.ContentValues\nimport android.content.Context\nimport android.database.sqlite.SQLiteDatabase\n\nclass MyDbManager(context: Context) {\n    private val myDbHelper = MyDbHelper(context)\n    private var db: SQLiteDatabase? = null\n\n    fun openDb(){\n        db = myDbHelper.writableDatabase\n    }\n    fun insertToDb(title: String, desc: String){\n        val values = ContentValues().apply {\n            put(MyDbNameClass.COLUMN_NAME_TITLE, title)\n            put(MyDbNameClass.COLUMN_NAME_DESC, desc)\n        }\n        db?.insert(MyDbNameClass.TABLE_NAME, null, values)\n    }\n\n    fun readDbData() : ArrayList<String> {\n        val dataList = ArrayList<String>()\n        val cursor = db?.query(MyDbNameClass.TABLE_NAME, null, null,\n            null, null, null, null)\n        db?.rawQuery(MyDbNameClass.TABLE_NAME, null)\n        var k = 1\n        while (cursor?.moveToNext()!!){\n            val dataText = cursor.getString(cursor.getColumnIndex(MyDbNameClass.COLUMN_NAME_TITLE))\n            dataList.add(dataText.toString())\n        }\n        cursor.close()\n        return dataList\n    }\n    fun closeDb(){\n        myDbHelper.close()\n    }\n}\n这是一个警告
\n\n\n\n值必须为 \xe2\x89\xa5 0 但 getColumnIndex 可以为 -1
\n
这表明在此方法中, 的值getColumnIndex(..)必须是\xe2\x89\xa5 0,\n但它会是-1
\n\n\n
getColumnIndex()返回给定列名称的从零开始的索引,如果该列不存在,则返回 -1。如果您希望该列\n存在getColumnIndexOrThrow(String),请改为使用,这将使错误\n更加清晰。
您有两个选择:
\n使用getColumnIndexOrThrow()而不是getColumnIndex()
\n\n\n
getColumnIndexOrThrow()返回给定列名称的从零开始的索引,或者如果该列不存在,则抛出 IllegalArgumentException。
使用注释禁用警告:
\n    @SuppressLint("Range")\n要禁用此警告,请添加注释,@SuppressLint("Range")因为该方法  getColumnIndex()需要特定数值范围 () 内的值\xe2\x89\xa5 0。
@SuppressLint("Range")\nfun readDbData() : ArrayList<String> {\n        val dataList = ArrayList<String>()\n        val cursor = db?.query(MyDbNameClass.TABLE_NAME, null, null,\n            null, null, null, null)\n        db?.rawQuery(MyDbNameClass.TABLE_NAME, null)\n        var k = 1\n        while (cursor?.moveToNext()!!){\n            val dataText = cursor.getString(cursor.getColumnIndex(MyDbNameClass.COLUMN_NAME_TITLE))\n            dataList.add(dataText.toString())\n        }\n        cursor.close()\n        return dataList\n    }\n| 归档时间: | 
 | 
| 查看次数: | 3793 次 | 
| 最近记录: |