Java
Android
Lombok
Realm

Realm Java 2.1.0を導入したメモ

More than 1 year has passed since last update.


これは何

Realmを導入した手順のメモ

最低限の手順でありRealmの機能紹介や良さの説明はしていないので注意


前提条件


  • Android Studio 2.1.2

  • RoBoHoN(Android 5.0.2 Lollipop API21)

  • Windows 10

  • Realm Java 2.1.0

  • Lombok 1.16.10

ライブラリバージョンは2016/10/26時点の最新版

公式で最新版を確認してください

realm公式:https://realm.io

realm公式手順:https://realm.io/docs/java/latest/#getting-started


Realm導入


  1. build.gradle (Prpoject)

    プロジェクトのbuild.gradleのbuildscript→dependenciesに下記を追加

    classpath "io.realm:realm-gradle-plugin:2.1.0"

  2. build.gradle(Module:App)

    モジュールのbuild.gradleの直下に下記を追加

    apply plugin: 'realm-android'


Lombok導入

Realmを使う上で必須ではないがGetter/Settterなど省略できるので一緒に導入

取りあえずRealm使いたいだけならこの手順は飛ばして良い


  1. build.gradle(Module:App)

    dependenciesに下記を追加

    compile "org.projectlombok:lombok:1.16.10"


  2. lombok.config

    build.gradle (Prpoject) がある階層にlombok.configという名前のファイルを作成

    内容は下記のとおり

    lombok.addGeneratedAnnotation = false

    ※この設定ファイルが無いとAndroid環境ではビルドエラーが出る


モデル(テーブル)の作成

RealmObjectを継承したデータモデルクラスを作成

https://realm.io/docs/java/latest/#models

フィールドをprivateで定義する場合(getterとsetterにLombokを利用)


java

import lombok.Getter;

import lombok.Setter;

@Getter
@Setter
public class SampleObject extends RealmObject {
private int id;
private String name;
}


フィールドをpublicで定義する場合


java

public class SampleObject extends RealmObject {

public int id;
public String name;
}

アノテーションを付けた場合


java

public class SampleObject extends RealmObject {

@PrimaryKey
public int id;
@Required
public String name;
}

@Ignoreを付けると保存されない項目になる

@Indexを付けると検索インデックスが設定される


Realmの設定

設定とはDB実体のファイル名や暗号化の有無などなど

下記のコードはデフォルト設定を使う場合

Applicationクラスを継承したクラスのonCreate()に下記のコードを記載すると

アプリ全体で使えるので便利


java

import io.realm.Realm;

import io.realm.RealmConfiguration;

public class MyApplication extends Application {
public void onCreate() {
super.onCreate();

// Realm設定ここから
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder().build();
Realm.setDefaultConfiguration(config);
// Realm設定ここまで
}
~~~ 省略 ~~~
}


カスタム設定を使う方法

https://realm.io/docs/java/latest/#configuring-a-realm


Realmインスタンスの取得

デフォルト設定の場合


java

Realm realm = Realm.getDefaultInstance();


カスタム設定の場合はgetInstance(RealmConfiguration configuration)を使うので注意


書き込み

書き込みは必ずトランザクションで囲む必要がある

createObjectの2個目のパラメータはモデルにPK(@PrimaryKey)を設定した場合にPKの値を指定する

PKを設定していない場合は指定しない


java

int id = 1;

Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
SampleObject obj = realm.createObject(SampleObject.class, id);
obj.name= 'test1';
}
});


取得(クエリ)

https://realm.io/docs/java/latest/#queries


java

Realm realm = Realm.getDefaultInstance();

// SampleObjectの id=1 のデータを取得
SampleObject obj= realm.where(SampleObject.class).equalTo("id", 1).findFirst();

// SampleObjectの全レコード取得
RealmResults<SampleObject> objs = realm.where(SampleObject.class).findAll();


idを文字指定するところがいけてないけどサンプルをざっと見た感じわからなかった

Realm Field Names Helperを入れるとidの文字列指定を回避できます

zaki50さんありがとうございます