领域。如何使用外部类中的Date进行迁移

时间:2017-06-23 11:52:56

标签: java realm

现在我有一个这样的架构:

class Entries {
 String name;
 Date date;
 RealmList<Entry> entries;
}

class Entry {
 int id;
 int hours;
 int minutes;
}

现在我需要迁移到这样的架构:

class Entry {
 int id;
 Date date;
}

所以我需要从Entries类中获取一个日期,并将其设置为列表中的每个条目,并从现有字段设置小时和分钟。

如何通过迁移实现这一目标?

2 个答案:

答案 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
}