Den*_*ata 5 sqlite android android-cursor kotlin
我在 Android Studio 中收到与光标有关的错误。
\n我的代码中有以下行
\nval dataText = cursor.getString(cursor.getColumnIndex(MyDbNameClass.COLUMN_NAME_TITLE))\nRun Code Online (Sandbox Code Playgroud)\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>\nRun Code Online (Sandbox Code Playgroud)\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}\nRun Code Online (Sandbox Code Playgroud)\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}\nRun Code Online (Sandbox Code Playgroud)\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}\nRun Code Online (Sandbox Code Playgroud)\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}\nRun Code Online (Sandbox Code Playgroud)\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")\nRun Code Online (Sandbox Code Playgroud)\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 }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3793 次 |
| 最近记录: |