【Kotlin】Realm Kotlin SDKを試してみた

AndroidにRealm Kotlin SDKを入れて試すための方法をご紹介します。

AndroidStudio Chipmunk 2021.2.1で試しています。

Kotlin SDKのインストール

プロジェクトレベルのGradleに1行追記。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id 'com.android.application' version '7.2.0' apply false
    id 'com.android.library' version '7.2.0' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.0' apply false
    id 'io.realm.kotlin' version '0.11.1' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

次にアプリレベルのGradleに3行追記。

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    id 'io.realm.kotlin'
}

:

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0-native-mt'
    implementation 'io.realm.kotlin:library-base:0.11.1'
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'com.google.android.gms:play-services-maps:17.0.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'com.google.android.gms:play-services-location:19.0.1'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

}

Sync Projectをしてインストール完了。

Realmを操作するサンプルコード

Realmを操作するシンプルなクラスを作ってみました。

package com.atmc118.mapsample

import android.util.Log
import io.realm.*

class CustomApplication{

    var realm:Realm

    //初期化しますよ。
    init {
        val configuration = RealmConfiguration.with(schema = setOf(Task::class))
        realm = Realm.open(configuration)
    }

    //データを書き込みますよ。
    fun write() {
        realm.writeBlocking {
            copyToRealm(Task().apply {
                name = "Do work"
                status = "Open"
            })
        }
    }

    //全てのデータを検索して、表示しますよ。
    fun query() {
        // all tasks in the realm
        val tasks: RealmResults<Task> = realm.query<Task>().find()

        for (task in tasks){
            Log.d("hoge",task.name)
            Log.d("hoge",task.status)
        }
    }

    //"Open"になっているタスクの1番目を"In Progree"に変更しますよ。
    fun update(){
        val openTasks: RealmResults<Task> =
            realm.query<Task>("status == $0", "Open")
                .find()

        realm.writeBlocking {
            findLatest(openTasks[0])?.status = "In Progress"
        }
    }

    //1番最初のタスクを削除しますよ。
    fun delete(){
        // delete the first task in the realm
        realm.writeBlocking {
            val writeTransactionTasks = query<Task>().find()
            delete(writeTransactionTasks.first())
        }
    }
}

class Task : RealmObject {
    var name: String = "new task"
    var status: String = "Open"
}

参考URL

MongoDBのサイトです。シンプルで分かりやすいです。

https://www.mongodb.com/docs/realm/sdk/kotlin/install/android/#std-label-kotlin-install-android

https://www.mongodb.com/docs/realm/sdk/kotlin/quick-start/

2 件のコメント

  • Realmコード添削の依頼

    突然すみません。独学でRealm(kotlin)を勉強中の者です。
    どうしてもRealmの使い方がわからず、おそらく一番新しい記事がこちらでしたので
    https://ymgsapo.com/2022/06/08/kotlin-realm-install/
    ご連絡させていただきました。

    ————————
    1)保存ボタンを押して
    name=”Taro”
    age = 20
    が保存され、

    2)表示ボタンで、上記2つがTextViewに表示される。
    ————————

    ただそれだけをやりたいだけなのですが、「1」を押した段階でエミュレータがクラッシュしてしまいます。

    私の現在のコードを添削いただくことは可能でしょうか?
    また、有料でしたら、おいくらくらいでお願いできますでしょうか。
    (一応1~2万円くらいであれば準備しています)
    ご検討のほどよろしくお願いします。

    ▼一応現在の当方のコードをテキストでお送りします。
    https://firestorage.jp/download/67d0bf6a964cccb5debdc290c5ad9bb378c448fc
    ダウンロードパスワード sxt6547u

    ※お返事は直接メールでいただけると助かります

    • Fujiさん、
      コメントありがとうございます。

      メールで返信はできませんのでこちらで回答いたします。
      クラッシュした時のエラーログを載せていただけませんでしょうか。

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    ABOUTこの記事をかいた人

    個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog