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 されない