现在我有一个这样的架构:
class Entries {
String name;
Date date;
RealmList<Entry> entries;
}
class Entry {
int id;
int hours;
int minutes;
}
现在我需要迁移到这样的架构:
class Entry {
int id;
Date date;
}
所以我需要从Entries类中获取一个日期,并将其设置为列表中的每个条目,并从现有字段设置小时和分钟。
如何通过迁移实现这一目标?
答案 0 :(得分:0)
您可以像使用普通类型的API一样使用DynamicRealm API来移动日期。类似的东西:
RealmMigration migration = new RealmMigration() {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmResults<DynamicRealmObject> entries = realm.where("Entries").findAll();
for (DynamicRealmObject entry : entries) {
RealmList<DynamicRealmObject> entriesList = entry.getList("entries");
for (DynamicRealmObject e : entriesList) {
e.setDate("date", entry.getDate("date"));
}
}
}
};
答案 1 :(得分:0)
具体来说,您需要编写以下代码(或非常相似的代码):
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// Migrate from version 0 to version 1
if (oldVersion == 0) {
RealmObjectSchema entriesSchema = schema.get("Entries");
RealmObjectSchema entrySchema = schema.get("Entry");
entrySchema.addField("date", Date.class);
Calendar calendar = Calendar.getInstance();
RealmResults<DynamicRealmObject> entriesList = realm.where("Entries").findAll();
for (DynamicRealmObject entries : entriesList) {
RealmList<DynamicRealmObject> entryList = entry.getList("entries");
for (DynamicRealmObject entry : entryList) {
Date date = entries.getDate("date");
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, entry.getInt("hours"));
calendar.set(Calendar.MINUTES, entry.getInt("minutes");
entry.setDate("date", calendar.getTime());
}
}
entrySchema.removeField("hours");
entrySchema.removeField("minutes");
oldVersion++;
}
}
// hashCode, equals
}