【发布时间】:2016-01-21 06:16:57
【问题描述】:
以前我使用的是 0.82.0 领域版本,现在我使用的是 0.87.0 版本。根据项目要求,我正在尝试将两个新表添加到现有领域架构中。
为此,我在下面添加了代码..
public class UnitDetails extends RealmObject {
private int unitUid;
private double noOfrooms;
private int unitArea;
private int fId;
private int fNum;
private int maxAvailablity;
// and setters and getter methods
}
public class Quote extends RealmObject {
private String qName;
private String qLocation;
// and setters and getter methods
}
迁移代码如下,使用应用上下文创建一个RealmConfiguration实例,在需要Realm实例的地方调用getRealmInstance()方法。
public class RealmUtils {
private static RealmConfiguration config;
public static void createRealmConfig(Context context) {
config = new RealmConfiguration.Builder(context)
.name("default.realm1")
.schemaVersion(1)
.migration(new CustomMigration())
.build();
}
public static Realm getRealmInstance() {
return Realm.getInstance(config);
}
}
public class CustomMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 0) {
RealmObjectSchema quoteSchema = schema.create("Quote")
.addField("qName", String.class)
.addField("qLocation", String.class);
RealmObjectSchema unitDetailsSchema = schema.create("UnitDetails")
.addField("unitUid", int.class)
.addField("noOfrooms", double.class)
.addField("unitArea", int.class)
.addField("fId", int.class)
.addField("fNum", int.class)
.addField("maxAvailablity", int.class);
oldVersion++;
}
}
}
当我通过安装新的 apk 更新我的应用程序时,我没有收到 RealmMigrationNeededException 但以前的数据丢失了。
这里出了什么问题以及如何防止数据丢失?我需要对现有表做任何事情吗?当我使用新的领域版本时,我应该注意什么?
【问题讨论】:
-
上述代码应该可以工作,并且不会导致任何数据丢失。领域的名字真的是
default.realm1吗? -
对于 shema 版本零,它是 default.realm,我为版本一提供了 default.realm1 名称。
-
这就是您的数据消失的原因。该名称也是所使用文件的名称。如果您更改该名称,您将创建一个全新的文件。