クイック スタート - Kotlin SDK
項目一覧
このページには、 Kotlin SDK で Realm をすばやく使用するための情報が含まれています。 任意の [ Device Sync の追加]セクションでは、Atlas Device Sync をアプリケーションに統合する方法について説明します。
開始する前に、プラットフォーム用の Kotlin SDK がインストールされていることを確認してください。
注意
このクイック スタートを KMIP で使用
このプロジェクトを新しい Kotlin マルチプラットフォーム(KMIP)テンプレート プロジェクトで実行している場合は、次のスニペットをコピーして、 commonMain
モジュールのGreeting.greeting()
メソッドに貼り付けることができます。
オブジェクトモデルを定義する
アプリケーションのデータモデルは、Realm 内に保存されるデータの構造を定義します。 Realm オブジェクトモデルを使用すると、アプリケーション コード内の Kotlin クラスを介してアプリケーションのデータモデルを定義できます。
アプリケーションのデータモデルを定義するには、アプリケーション コードに クラス定義 を追加します。 以下の例では、Todo リスト アプリの Todo アイテムを表す 'Item' モデルの作成を示します。
class Item() : RealmObject { var _id: ObjectId = ObjectId() var isComplete: Boolean = false var summary: String = "" var owner_id: String = "" constructor(ownerId: String = "") : this() { owner_id = ownerId } }
Realm を開く
RealmConfiguration.create()を使用して、デフォルトのパラメータを使用してRealmを開きます。 構成をRealm ファクトリー コンストラクターに渡して、その Realm のインスタンスを生成します。
val config = RealmConfiguration.create(schema = setOf(Item::class)) val realm: Realm = Realm.open(config)
オープンするRealmConfigurationの詳細を制御する方法の詳細(例: 名前、場所、スキーマ バージョン)については、「 Realm のオープンと閉じ 」を参照してください。
オブジェクトの作成、読み取り、更新、削除
開くと、書込みトランザクション ブロック内の Realm 内にオブジェクトを作成できます。
新しいItem
を作成するには、 Item
クラスのインスタンスをインスタンス化し、それを書込みトランザクション ブロックの Realm に追加します。
realm.writeBlocking { copyToRealm(Item().apply { summary = "Do the laundry" isComplete = false }) }
query.find()を使用して、Realm 内のすべての Todo 項目のコレクションを検索できます。
// all items in the realm val items: RealmResults<Item> = realm.query<Item>().find()
また、コレクションをフィルタリングして、より具体的なオブジェクトのコレクションを取得することもできます。
// items in the realm whose name begins with the letter 'D' val itemsThatBeginWIthD: RealmResults<Item> = realm.query<Item>("summary BEGINSWITH $0", "D") .find() // todo items that have not been completed yet val incompleteItems: RealmResults<Item> = realm.query<Item>("isComplete == false") .find()
string Realm クエリの詳細については、「データのフィルター 」を参照してください。
Todo 項目を変更するには、書込みトランザクション (write transaction) ブロックでそのプロパティを更新します。
// change the first item with open status to complete to show that the todo item has been done realm.writeBlocking { findLatest(incompleteItems[0])?.isComplete = true }
最後に、書込みトランザクション (write transaction) ブロックでMutableRealm.delete()を呼び出すことで、Todo 項目を削除できます。
// delete the first item in the realm realm.writeBlocking { val writeTransactionItems = query<Item>().find() delete(writeTransactionItems.first()) }
変更の監視
observe
メソッドを使用して、Realm、コレクション、またはオブジェクトの変更を監視できます。
重要
サーバーレスの制限事項
データソースが Atlas サーバーレスインスタンスの場合、変更を監視することはできません。 MongoDB サーバーレスは現在、変更をリッスンするために監視対象コレクションで使用される 変更ストリーム をサポートしていません。
次の例では、すべてのItem
オブジェクトの変更をリッスンしています。
// flow.collect() is blocking -- run it in a background context val job = CoroutineScope(Dispatchers.Default).launch { // create a Flow from the Item collection, then add a listener to the Flow val itemsFlow = items.asFlow() itemsFlow.collect { changes: ResultsChange<Item> -> when (changes) { // UpdatedResults means this change represents an update/insert/delete operation is UpdatedResults -> { changes.insertions // indexes of inserted objects changes.insertionRanges // ranges of inserted objects changes.changes // indexes of modified objects changes.changeRanges // ranges of modified objects changes.deletions // indexes of deleted objects changes.deletionRanges // ranges of deleted objects changes.list // the full collection of objects } else -> { // types other than UpdatedResults are not changes -- ignore them } } } }
後で、監視が完了したら、ジョブをキャンセルしてコルーチンをキャンセルします。
job.cancel() // cancel the coroutine containing the listener
Realm を閉じる
Realm とすべての基礎となるリソースを閉じるには、 Realm.close()を呼び出します。 close()
メソッドは、Realm 上のすべての書込みトランザクションが完了するまでブロックします。
realm.close()
Device Sync の追加(任意)
このセクションでは、匿名ユーザーで認証し、Flexible Sync レルムを開いてデバイス間でデータの同期を開始する方法を説明します。
前提条件
このセクションのコード スニペットには、次のものが必要です。
App Services UI で匿名認証を有効にしました
開発モード をオンに切り替え、 セクションの フィールドで Flexible Sync を有効にする
owner_id
Queryable Fields
アプリを初期化する
認証や同期などの App Services 機能を使用するには、App ID を使用して App Services App にアクセスします。 アプリ ID は、App Services UI で確認できます。
val app = App.create(YOUR_APP_ID)
ユーザーの認証
ユーザーを認証してログインするには、 App.loginを呼び出します。 匿名認証が有効になっている場合、ユーザーは識別情報を提供することなく、アプリにすぐにログインできます。
val credentials = Credentials.anonymous() val user = app.login(credentials)
同期された Realm を開く
Atlas App Services アプリを初期化し、ユーザーを認証し、オブジェクトモデルを定義したら、 SyncConfiguration を作成できます。
上記の「 Realm を開く 」セクションに従ってローカルRealmを開いている場合は、 RealmConfigurationを以下に説明するSyncConfiguration
に置き換えます。
認証されたユーザーとItem
クラスをSyncConfiguration.Builder関数に渡して、 Flexible Sync 構成を作成します。
重要
最初のサブスクリプション
Realm から読み取ったり、Realm に書き込む前に、少なくとも 1 つのサブスクリプションが必要です。 initialSubscriptionsを使用して、Realm ファイルが最初に開かれたときに初期サブスクリプションセットを定義します。 サブスクライブするクエリとサブスクライブの名前をadd()関数に渡します。
以下の例えでは、すべてのItem
オブジェクトを含む「ユーザーのアイテム」という名前のサブスクライブを指定します。
// create a SyncConfiguration val config = SyncConfiguration.Builder( user, setOf(Item::class) ) // the SyncConfiguration defaults to Flexible Sync, if a Partition is not specified .initialSubscriptions { realm -> add( realm.query<Item>( "owner_id == $0", // owner_id == the logged in user user.id ), "User's Items" ) } .build() val realm = Realm.open(config)
次へ: テンプレート アプリとチュートリアルを確認
テンプレート アプリをチェックして、Realm Kotlin SDK でコーディングを開始する別の方法を試します。 android.kotlin.todo.flex
というラベルの付いた Kotlin SDK テンプレートは、Realm と Atlas Device Sync をカスタマイズ可能な Android アプリに統合する事前作成アプリケーションです。
あるいは、ガイド付きエクスペリエンスが必要な場合は、テンプレート アプリで展開するKotlin SDK と Android のチュートリアルをお読みください。