|
|||||||||
Android/realm の変更点
#author("2018-03-09T06:41:23+00:00","default:pentacle","pentacle")
API Level 9 (2.3) 以降推奨
* install [#a96fc2e3]
''buid.gradle(Module app)''
apply plugin: 'realm-android'
''buid.gradle(Project: )''
classpath "io.realm:realm-gradle-plugin:4.2.0"
* model [#ta5ad0b4]
''models/Country.java''
#pre{{
public class Country extends RealmObject {
@PrimaryKey
public int code;
public String name;
public RealmList<Prefecture> prefectures; // @OneToManyな感じ
}
}}
''models/Prefecture.java''
#pre{{
public class Prefecture extends RealmObject{
@PrimaryKey
public int code;
public String name;
public LatLng latlng; // @OneToOneな感じ
}
}}
''models/LatLng.java''
#pre{{
public class LatLng extends RealmObject{
public double lat;
public double lng;
}
}}
* activity / application [#yae96e59]
''MainActivity.java''
#pre{{
@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();
}
}}
* 注意事項 [#m01b8917]
** managed に関して [#q0ad0c17]
- Country japan = new Country(); のようにすると unmanaged object になり、永続化されない
- Country japan = realm.createObject(Country.class , 81 ) にすると、監視され、変数を変えた時点で永続化予約がされる
- OneToOne / OneToMany 等には managed object を入れないとエラーになる
** OneToMany に関して [#j9864c85]
- japan.prefectures.add(xxx); をすると load 時にも 復元される
- RealmList<xxx> に add すると cascade save されるが、primary key は付かない
- japan.deleteFromRealm(); をしても cascade delete されない
|
|||||||||