LoginSignup
2
8

More than 5 years have passed since last update.

Android KotlinでRealmを使う

Posted at

環境

  • 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()
        }
2
8
1

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
8