SEARCH

Linux Install

Android

Linux Tools

Linux AV

Linux Memo

WINDOWS

PROGRAM

動画 Memo

音楽 Memo

モバイルアプリ Memo

FILE FORMAT

PROTOCOL

DEVICE

BookMark

その他


Android/realm   

API Level 9 (2.3) 以降推奨

install

buid.gradle(Module app)

apply plugin: 'realm-android'

buid.gradle(Project: )

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

model

models/Country.java

public class Country extends RealmObject {
    @PrimaryKey
    public int code;
    public String name;
    public RealmList<Prefecture> prefectures; // @OneToManyな感じ
}

models/Prefecture.java

public class Prefecture extends RealmObject{
    @PrimaryKey
    public int code;
    public String name;
    public LatLng latlng; // @OneToOneな感じ
}

models/LatLng.java

public class LatLng extends RealmObject{
    public double lat;
    public double lng;
}

activity / application

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Realm.init(this);
        RealmConfiguration config = new RealmConfiguration
                .Builder()
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm realm = Realm.getInstance(config);
        realm.beginTransaction();

        realm.delete(Country.class);
        realm.delete(Prefecture.class);
        {
            Country j = new Country();
            j.code = 81;
            j.name = "日本";
            Country japan = realm.copyToRealm(j);

            Country china = realm.createObject(Country.class, 86);
            china.name = "中国";

            Prefecture hokkaido = realm.createObject(Prefecture.class, 1);
            hokkaido.name = "北海道";
            LatLng latlng = realm.createObject(LatLng.class);
            latlng.lat = 43.06417;
            latlng.lng = 141.34694;
            hokkaido.latlng = latlng;

            Prefecture aomori = realm.createObject(Prefecture.class, 2);
            aomori.name = "青森";

            japan.prefectures.add(hokkaido);
            japan.prefectures.add(aomori);

            realm.commitTransaction();
        }

        {
            List<Country> countries = realm.where(Country.class).findAll();
            for (Country c : countries) {
                System.out.println(c.name);
                for (Prefecture p : c.prefectures) {
                    System.out.println("-" + p.name);
                    if (p.latlng!=null) {
                        System.out.println("-" + p.latlng.lat);
                        System.out.println("-" + p.latlng.lng);
                    }
                }
            }
        }
        realm.close();
    }

注意事項

managed に関して

  • Country japan = new Country(); のようにすると unmanaged object になり、永続化されない
  • Country japan = realm.createObject(Country.class , 81 ) にすると、監視され、変数を変えた時点で永続化予約がされる
  • OneToOne / OneToMany 等には managed object を入れないとエラーになる

OneToMany に関して

  • japan.prefectures.add(xxx); をすると load 時にも 復元される
  • RealmList<xxx> に add すると cascade save されるが、primary key は付かない
  • japan.deleteFromRealm(); をしても cascade delete されない