KotlinでRealm利用【Modelとデータ作成】

前回Realmの利用準備が整ったので実際に使っていきます。必要なものは

・Model(モデル)

・データの作成、読み込み、編集、削除の処理です

 

Modelというのは所謂SQLでのテーブルのことですね。

これをソースコード上で作成する必要があるので、そのために

Modelというクラスファイルを作成し、そこにテーブルの定義を書きます。

 

 

クラスファイルを新規作成してModelの名前をつけます。

(テーブル名を名前にするので私はBoardとしました)

そしてModel用のクラスにするにはRealmObjectのサブクラスにします。

 

見てもらえば分かると思いますが、

主キーには@Primaryというアノテーションを付けます。

そしてNULL値となってはいけないフィールドには@Requiredの

アノテーションを使用して入力を必須にすることができます!

 

 

これであとはデータを作成や編集、削除したいところでその処理を書きますが、

ここではデータの作成部分だけ書くことにします。

 

 

データの作成ですが、作成用のボタンを押したときにデータを

新規登録するというようにしたので、簡易的にコードを書きますが

以下のようにします。(… は省略です。)

 

上の メソッドcreateBoardでデータを作成しています。(↓)

 

 

順にみていきたいのですが、まずKotlinを勉強しててnullに対して

安全な対策が取られている言語ということは分かったのですが、

じゃあメンバ変数を宣言する際に、同時に初期化しないようにするには

どうしたらいいんだろうとなりました。

 

調べたところvarの前にlateinitを付けるということでした。

Lateinitとは

NonNullなプロパティーの初期化をconstructorより後に遅らせられる機能

(https://blog.takuji31.jp/entry/2018/02/09/135107

 

valには使えない等制約もあるようですが、問題なく使えそうです。

従って、以下のようにRealmクラスのインスタンスを宣言しました。

 

 

コードの順通りではなく、話が前後しますが、

まずデータの作成をトランザクションで行うので、

RealmのexecuteTransaction内で以下のように

createObjectでBoardのオブジェクトを作成し、作成と同時に

primarykeyのidにnewIdの値を入れています。

 

それからドットで各カラムを指定できるので、

board.nameとboard.dateに入れたい値を挿入しています。

 

コードを見ていただければわかりますが、

実はRealmはオートインクリメント機能がないので、

自分でその設定をしてやる必要があります。

 

 

設定と言ってもデータを新しく作成時に

・既存のデータのidの最大値を取得してそれに+1する

だけですね!

 

whereでModelを指定し、その後に検索条件を書きます。

ここではidの最大値を取得するのでmax()メソッドを利用し、カラムidを指定します。

それから+1したのを新しいnewIdに入れています。

 

 

nullチェックというのは、一番最初にデータを作るときは

データを検索しても何もなく取得できませんので、nullが返ってきます。

そのときはidを0番目する、という初期用の処理ですね。

 

 

以上がデータ作成の手順です。

 

データの読み込みや更新は、whereを使って取得したいものを

取得してきて、同じようにカラムに代入とかするだけですし、

データ削除もメソッド一つで出来ます!

 

Realm凄く使いやすいです…笑

コメントする

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