Docs Menu
Docs Home
/ /
Atlas Device SDK

クイック スタート - Kotlin SDK

項目一覧

  • オブジェクトモデルを定義する
  • Realm を開く
  • オブジェクトの作成、読み取り、更新、削除
  • 変更の監視
  • Realm を閉じる
  • Device Sync の追加(任意)
  • 前提条件
  • アプリを初期化する
  • ユーザーの認証
  • 同期された Realm を開く
  • 次へ: テンプレート アプリとチュートリアルを確認

このページには、 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 {
@PrimaryKey
var _id: ObjectId = ObjectId()
var isComplete: Boolean = false
var summary: String = ""
var owner_id: String = ""
constructor(ownerId: String = "") : this() {
owner_id = ownerId
}
}

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.close()を呼び出します。 close()メソッドは、Realm 上のすべての書込みトランザクションが完了するまでブロックします。

realm.close()

このセクションでは、匿名ユーザーで認証し、Flexible Sync レルムを開いてデバイス間でデータの同期を開始する方法を説明します。

このセクションのコード スニペットには、次のものが必要です。

認証や同期などの 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)

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 のチュートリアルをお読みください。

次へ

Atlas Device SDK Docsへようこそ