レルムを初めて使用しました。私はローカルDBとしてレルムを使用しています。もしアプリケーションが更新されたら、私はデータを失いたくありません。私が以前行ったことアプリケーションを更新するときにレルムからデータを移行する方法
public static Realm getRealmInstanse(){
RealmConfiguration config = new RealmConfiguration
.Builder()
.deleteRealmIfMigrationNeeded()
.build();
try {
return Realm.getInstance(config);
} catch (RealmMigrationNeededException e){
try {
Realm.deleteRealm(config);
//Realm file has been deleted.
return Realm.getInstance(config);
} catch (Exception ex){
throw ex;
//No Realm file to remove.
}
}
}
今、私は次の操作を行うべきだと思うされています
public static Realm getRealmInstanse(){
RealmConfiguration config = new RealmConfiguration
.Builder()
.migration(new RealmMigration() {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
}
})
.build();
return Realm.getInstance(config);
}
私はデータをコピーするために内部移行()メソッドを何をすべき?そして、スキーマはどうですか、私はスキーマのバージョンを使用する必要がありますどのような目的のために?
スキーマを変更するロジックは何ですか?たとえば、何らかの理由で私がdbの構造を変更する場合、migrate()メソッド内のスキーマを変更するだけですか?
私はこの例を見つけたが、それは、データを保存するか、単に私がコピーするために内部移行()メソッドを何をすべき
if (oldVersion == 0) {
RealmObjectSchema personSchema = schema.get("Person");
// Combine 'firstName' and 'lastName' in a new field called 'fullName'
personSchema
.addField("fullName", String.class, FieldAttribute.REQUIRED)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("fullName", obj.getString("firstName") + " " + obj.getString("lastName"));
}
})
.removeField("firstName")
.removeField("lastName");
oldVersion++;
}
私はちょっと寂しかったです。私はrealm repoでgetInstanceを何度も使用していますが、ApplicationではRealm.init(this)のみを使用しています。また、migrate()メソッド内のスキーマを変更すると、自動的にデータが削除されますか?例えばpersonSchema .addField(....) –
多分、私はアプリケーション内でsomwhereを保存し、Realmインスタンスを起動して、アプリケーションの起動時に起動する必要があります。それは働くでしょうか? –
私がリンクしているレルムのウェブサイトのドキュメントを読んでください、それは私ができるよりも優れていることをすべて説明しています –