我们将 Realm 用于我们的应用程序。我们的应用程序已发布测试版。现在我想向我们的一个 Realm 对象添加一个字段。所以我必须写RealmMigration,我也写了一个。这里的问题是如何将此 Realm 迁移应用到我的应用程序。每当我想要某些东西时,我都会使用 Realm.getInstance() 获取 Realm 实例。请记住,Realm.getInstance() 每次都在整个应用程序中使用,我想访问 Realm 数据库。
那么,我对如何应用此迁移有点疑问?任何线索都会有所帮助。谢谢。
我的 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 以缩短问题。当我尝试重新安装应用程序而不卸载前一个应用程序时发生异常。请指教。
最佳答案
这里有描述:https://realm.io/docs/java/latest/#migrations
但从本质上讲,您只需提升架构版本并像这样设置配置:
RealmConfiguration config = new RealmConfiguration.Builder(context)
.schemaVersion(2) // Must be bumped when the schema changes
.migration(new MyMigration()) // Migration to run
.build();
Realm.setDefaultConfiguration(config);
// This will automatically trigger the migration if needed
Realm realm = Realm.getDefaultInstance();
关于android - 做Realm Migration Android的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836761/