LoginSignup
9
12

More than 5 years have passed since last update.

Realm Java 2.1.0を導入したメモ

Last updated at Posted at 2016-10-27

これは何

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';
    }
});

取得(クエリ)

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さんありがとうございます

9
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12