LoginSignup
27
29

More than 5 years have passed since last update.

Android Realm BrowserでRealmDBをのぞく

Last updated at Posted at 2015-05-12

Realm Sample

Android Realm BrowserでRealmの中身をのぞいてみるサンプル.
サンプルプロジェクトはこちら

はじめに

Realmはモバイル向けに作られた軽量なNoSQL Database.

下記はAndroid向けに作られたrealm-javaについての記載である.

  • パフォーマンスはSQLiteやOrmLite, greenDAO等のORMよりもInsert/Count/Queryそれぞれ数倍高速に動作する.
  • 暗号化機能も備えており, パフォーマンスは通常時と比べてもほぼ変わらない.
  • iOS向けにも提供されている(クロスプラットフォーム).
  • ContentProviderの実装と比べて恐ろしく簡単に実装でき, 使い方も容易.

動作要件

realm-javaの動作要件は下記.

  • only Android.
  • AndroidStudio 0.8.6 or later.
  • latest Android SDK.
  • JDK 7 or later.
  • Android API Level 9 or higher.

準備

build.gradleに下記を追加.

compile 'io.realm:realm-android:0.86.1'

ProGuardに下記を追加.

Realmはコンパイル時にRealmObjectのProxyを生成する. ProGuardがこれを壊さないために下記を追加する.

-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.internal.Keep
-keep @io.realm.internal.Keep class * { *; }
-dontwarn javax.**
-dontwarn io.realm.**

Browse

Realmのデータベースを覗くソフトがMacOSX向けにリリースされている.
Realm Browser

アプリケーションフォルダ/files下に出力されたrealmファイルをこれにかませると中身をみられる.

Androidデバイス上でデータベースを閲覧するライブラリもある.
Android Realm Browser

build.gradleに下記を追加.

compile 'com.github.dmytrodanylyk.realm-browser:library:0.0.3'
// セットアップして...
RealmBrowser.getInstance().addRealmModel(Model.class);

// 閲覧用のActivityを呼び出せばok
RealmFilesActivity.start(this);

Model

Realmでのモデル定義. クラス自体はシンプルだが制約がある.

  • 主キーには@PrimaryKeyアノテーションを付与.
  • getter/setterはRealmのproxyオブジェクト生成のためだけに必要. getter/setterは実行されない
  • getter/setter以外のメソッドは定義できない

Realm向けのModelクラスは完全にRealm専用とした方が良い.
Realmがサポートするデータ型は boolean, short, ìnt, long, float, double, String, Date, byte[].

Realmではshort, int, longがすべてlong型として扱われる.

また, 1対多, 多対多なリレーションのためにRealmObjectのサブクラスとRealmList<? extends RealmObject>が関連付けのために使用される.

public class Model extends RealmObject {
    @PrimaryKey
    private String pk;
    private int value;

    public String getPk() {
        return pk;
    }

    public void setPk(String pk) {
        this.pk = pk;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
}

Realm Databaseへ書き込み.

Realm realm = Realm.getInstance(this, "test.realm");
realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        Model model = realm.createObject(Model.class);
        model.setPk(UUID.randomUUID().toString());
        model.setValue(new Date().getTime());
    }
});
realm.close();

Android Realm Browserで結果を見る. MainActivity

List list = RealmBrowser.getInstance().getRealmModelList();
if (list != null && !list.contains(Model.class)) {
    RealmBrowser.getInstance().addRealmModel(Model.class);
}
RealmFilesActivity.start(this);

以上.

27
29
1

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
27
29