社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Android(kotlin) SQLite データの選択

完成イメージ

リストの中の項目をタッチすると、その項目に保存されていたデータが読み込まれて画面に出力されます。
f:id:blueskyarea:20200505101043p:plain

編集するファイル

以下の記事で作成したプロジェクトを引き続き編集していきます。
blueskyarea.hatenablog.com

  • MainActivity.kt
データ選択処理(MainActivity.kt)

データ取得処理の流れ
1. データベース接続オブジェクトを取得する
2. SQL文を作成する
3. SQL文を実行する
4. カーソルオブジェクトをループし、データを取得する
5. 結果を画面に反映させる

    private inner class ListItemClickListener: AdapterView.OnItemClickListener {
        override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            Log.d("MainActivity", "Called onItemClick()")
            // Set selected list number
            levelId = position
            // set selected list name
            levelName = parent.getItemAtPosition(position) as String
            // Find TextView for level name
            val tvLevelName = findViewById<TextView>(R.id.tvSelectedLevel)
            // Show selected level name
            tvLevelName.text = levelName
            // Find button for save
            val btnSave = findViewById<Button>(R.id.btnSave)
            // Enable the button
            btnSave.isEnabled = true

            // Get database connection object
            val db = dbHelper.writableDatabase
            // Statement for Select
            val sql = "SELECT * from levels where _id = $levelId"
            val cursor = db.rawQuery(sql, null)

            // Variable for result
            var result = ""
            // Get result from cursor object
            while(cursor.moveToNext()) {
                // Get column index
                val idxDescription = cursor.getColumnIndex("description")
                result = cursor.getString(idxDescription)
            }
            // Show result
            val description = findViewById<EditText>(R.id.etNote)
            etNote.setText(result)
        }
    }

メモ
val sql = "SELECT * from levels where _id = $levelId"
>${levelId} と書くのが一般的だった気がしますが、現在 {} は不要のようです。

var result = ""
> 今回は取得されるデータが1行しかない(Select文の結果が必ず1レコードのみ) であるため、単体の変数を用意していますが、もし複数レコードの結果が期待される場合は、List(配列)の変数を用意し、それに順次格納していくような流れが想定されます。

ビルド・実行

Run ボタンをクリックし、エミュレータを起動させます。
リストの中から、"Normal" をタッチし、適当な Description を入力して、Save ボタンをタッチします。
f:id:blueskyarea:20200505101626p:plain
この時点で "Description" に入力していた値は消えますが、改めて "Normal" をタッチすると、先ほど入力した "Description" と同じ内容が表示されます。
f:id:blueskyarea:20200505101043p:plain