我們使用Realm作爲我們的應用程序。我們的應用已經發布。現在我想添加一個字段給我們的一個領域對象。所以我寫了RealmMigration,我也寫了一個。這裏的問題是如何將這個Realm遷移應用到我的應用程序。我使用Realm.getInstance()獲取領域實例,只要我想要的東西。請記住,Realm.getInstance()每次都在整個應用程序中使用,我想訪問Realm數據庫。做Realm遷移的正確方法Android
所以,我有點疑問如何應用此遷移?任何潛在客戶都可能會有幫謝謝。
我的RealmMigration如下。
public class RealmMigrationClass implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
if(oldVersion == 0) {
RealmSchema sessionSchema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema sessionObjSchema = sessionSchema.get("Session");
sessionObjSchema.addField("isSessionRecordingUploading", boolean.class, FieldAttribute.REQUIRED)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("isSessionRecordingUploading", false);
}
});
sessionObjSchema.setNullable("isSessionRecordingUploading",false);
oldVersion++;
}
}
}
}
public class Session extends RealmObject {
@PrimaryKey
private String id;
@Required
private Date date;
private double latitude;
private double longitude;
private String location;
private String note;
private String appVersion;
private String appType;
private String deviceModel;
private HeartRecording heart;
private TemperatureRecording temperature;
private LungsRecording lungs;
@NotNull
private boolean isSessionRecordingUploading;
private boolean sessionInfoUploaded;
private boolean lungsRecordingUploaded;
private boolean heartRecordingUploaded;
}
從RealmObject中刪除了Getter和Setter以縮短問題。當我嘗試重新安裝應用程序而未卸載前一個應用程序時發生異常。請指教。
感謝Christian。如果我的理解是正確的,模型將有新創建的字段,並且所有Realm.getInstance(this)將是Realm.getInstance(config <像上面那樣創建>) – User
是的,這是正確的。您應該使用'Realm.getDefaultInstance()'或'Realm.getInstance(RealmConfiguration)'而不是'Realm.getInstance(Context)'。 –
今天我嘗試了,我得到了「io.realm.exceptions.RealmMigrationNeededException:Field'isSessionRecordingUploading'在現有的Realm文件中支持空值。使用相應的盒裝類型作爲字段'isSessionRecordingUploading'或使用io.realm.internal.Table .convertColumnToNotNullable()「。我稍微修改了RealmMigration類,並在Realm對象的字段中添加了notNull註釋。但我仍然無法克服這個問題。我更新了Q. – User