Android KotlinでRealmを使う
環境
- Android Studio 3.0.1
- kotlin_version = '1.2.21'
- Realm 5.0.0
資料
Realm公式 Realm: Create reactive mobile apps in a fraction of the time
Realmの導入
プロジェクトのbuild.gradleにrealmを追加
buildscript { ext.kotlin_version = '1.2.21' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.realm:realm-gradle-plugin:5.0.0" //追加 } }
appのbuild.gradleにrealmを追加
ここはrealmを最後の行に書かないとエラーになるはず
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'realm-android' //追加
Realm初期設定
Realm.init
これはアプリ起動中に1回行うだけでいいので、カスタムアプリケーションクラスでやるのがオススメ
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this); }
AndroidManifestにカスタムアプリケーションを登録するのを忘れずに
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ikemura.com.kotlinrealmmigration" > <application + android:name=".MyApplication" android:allowBackup="true"
Realm使用
インスタンス化
いよいよ画面でrealmを使えるようになった
lateinit var realm: Realm private fun initRealm() { val realmConfiguration = RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() .schemaVersion(0) .build() realm = Realm.getInstance(realmConfiguration) }
Insert
Transaction化しないとIllegalStateExceptionが発生する
realm.executeTransaction { realm.insert(Book(1,"first")) }
Read
titleが「first」と一致する値をbook
に取得する
var book = realm.where(Book::class.java) .equalTo("title","first") .findAll() Log.d(TAG,book.toString())
equalTo
:カラム名, 値 の比較を行える
findAll
:クエリ条件を満たすすべてのオブジェクトを同期検索する
Delete
削除もTransaction化しないとIllegalStateExceptionが発生する
//削除対象を取得 var book = realm.where(Book::class.java) .equalTo("title","first") .findAll() //削除 realm.executeTransaction { book.deleteAllFromRealm() }