環境
- 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を追加
build.gradle
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を最後の行に書かないとエラーになるはず
app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android' //追加
Realm初期設定
Realm.init
これはアプリ起動中に1回行うだけでいいので、カスタムアプリケーションクラスでやるのがオススメ
MyApplication.kt
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
}
AndroidManifestにカスタムアプリケーションを登録するのを忘れずに
AndroidManifest.xml
<?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()
}