4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Android KTXを使ってみた〜SQLiteDatabase編〜

Last updated at Posted at 2018-02-15

検証環境

この記事の内容は、以下の環境で検証しました。

  • Java:open jdk 1.8.0_152
  • Kotlin 1.2.10
  • Android Studio 3.0.2
  • CompileSdkVersion:26
  • MinSdkVersion:21
  • TargetSdkVersion:26
  • BuildToolsVersion:26.0.2
  • gradle:4.0.0
  • Android KTX:0.1

Android KTXとは

AndroidアプリのKotlinコードを簡潔に快適に記述できるように設計された拡張機能です。
提供元はGoogleです。オフィシャルのライブラリーになります。
※この記事を書いている時点(2018/02/08)では、プレビュー版のため、今後、APIの変更も予想されます。ご注意ください。

参考

Android Develpers Blog
https://android-developers.googleblog.com/2018/02/introducing-android-ktx-even-sweeter.html

Github
https://github.com/android/android-ktx/

API reference
https://android.github.io/android-ktx/core-ktx/

目標

Android KTXを利用したデータベースアクセスで、従来の記述方法との違いを確認する。

準備

Android KTXを使用するために、下記をbuild.gradleに追記してください。

build.gradle(一部省略)
repositories {
    google()
}
dependencies {
    implementation 'androidx.core:core-ktx:0.1'
}

注意点

Android KTXはcompileSdkVersionが27になっていなければ使用できません。
また、compileSdkVersionを27にする場合、その他のライブラリもバージョンを上げる必要があります。
結果的に以下のような形になります。

build.gradle(一部省略)
android {
   compileSdkVersion 27
}
repositories {
    google()
}
dependencies {
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation 'androidx.core:core-ktx:0.1'
}

実装

今回の例

テーブルを全件検索して、dataクラスに格納するコードを例とします。

テーブル

今回は下記のテーブルを使用します。
テーブル名:User

id name
1 山田太郎
2 花子さん

dataクラス

検索した結果を格納するクラスは以下のとおりです。
クラス名:UserEntity

UserEntity
data class UserEntity(val id:Int, val name:String)

データベースアクセス

Android KTXで記述すると以下のようになります。

val dbHelper = DatabaseOpenHelper(this)
dbHelper.readableDatabase.use {
    val cursor = it.query("User", null, null, null, null, null, null)
    while (cursor.moveToNext()) {
        // KTXでの書き方
        val ktxId = cursor.getInt("id")
        val ktxName = cursor.getString("name")

        val ktxData = UserEntity(ktxId, ktxName)
        Log.e("KTX SQLiteDatabase", ktxData.toString())
    }
}

従来の記述方法で書くと以下のようになります。

val dbHelper = DatabaseOpenHelper(this)
dbHelper.readableDatabase.use {

    val cursor = it.query("User", null, null, null, null, null, null)
    while (cursor.moveToNext()) {

        // 従来の書き方
        val idIndex = cursor.getColumnIndex("id")
        val id = cursor.getInt(idIndex)

        val nameIndex = cursor.getColumnIndex("name")
        val name = cursor.getString(nameIndex)

        val data = UserEntity(id, name)

        Log.e("KTX SQLiteDatabase", data.toString())
    }
}

差分だけを抜き出すと以下のようになります。

// KTXでの書き方
val ktxId = cursor.getInt("id")
val ktxName = cursor.getString("name")

// 従来の書き方
val idIndex = cursor.getColumnIndex("id")
val id = cursor.getInt(idIndex)

val nameIndex = cursor.getColumnIndex("name")
val name = cursor.getString(nameIndex)

従来の記述方法では、列名からインデックスを取得した後に、そのインデックスを使用して列のデータを取得していました。
Android KTXを利用することにより、Cursorから直接、列名を指定してデータを取得できるようになっています。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?