LoginSignup
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-02-16

検証環境

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

  • 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を利用したContentValuesの生成方法で、従来の記述方法との違いを確認する。

準備

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'
}

実装

今回の例

テーブルにレコードを挿入するコードを例とします。

テーブル

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

id INTEGER
name Text

データベースアクセス

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

val dbHelper = DatabaseOpenHelper(this)
dbHelper.writableDatabase.use {
    // KTXでの書き方
    val taroCvo = contentValuesOf("id" to 1, "name" to "太郎")
    it.insert("User", null, taroCvo)

    val hanakoCvo = contentValuesOf("id" to 2, "name" to "花子さん")
    it.insert("User", null, hanakoCvo)
}

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

val dbHelper = DatabaseOpenHelper(this)
dbHelper.writableDatabase.use {
    // 従来の書き方
    val taroCv = ContentValues().apply {
        put("id", 1)
        put("name", "山田太郎")
    }

    val hanakoCv = ContentValues().apply {
        put("id", 2)
        put("name", "花子さん")
    }

    it.insert("User", null, taroCv)
    it.insert("User", null, hanakoCv)
}

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

// KTXでの書き方
val taroCvo = contentValuesOf("id" to 1, "name" to "太郎")
it.insert("User", null, taroCvo)

val hanakoCvo = contentValuesOf("id" to 2, "name" to "花子さん")
it.insert("User", null, hanakoCvo)

// 従来の書き方
val taroCv = ContentValues().apply {
    put("id", 1)
    put("name", "山田太郎")
}

val hanakoCv = ContentValues().apply {
    put("id", 2)
    put("name", "花子さん")
}

it.insert("User", null, taroCv)
it.insert("User", null, hanakoCv)

従来の記述方法では、事前にContentValuesクラスのオブジェクトを生成してからinsertメソッドを呼び出してレコードを挿入していました。
Android KTXを利用することにより、contentValuesOfを呼び出し、Pairを利用しContentValuesが簡潔に生成できるようになりました。

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
2