検証環境
この記事の内容は、以下の環境で検証しました。
- 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に追記してください。
repositories {
google()
}
dependencies {
implementation 'androidx.core:core-ktx:0.1'
}
注意点
Android KTXはcompileSdkVersionが27になっていなければ使用できません。
また、compileSdkVersionを27にする場合、その他のライブラリもバージョンを上げる必要があります。
結果的に以下のような形になります。
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が簡潔に生成できるようになりました。