我有一个关于制作的应用,因此必须使用RealmMigration
我查看了文档和example,但我没有找到如何执行以下操作。
在当前版本中,我有Foo
类型的项目,其boolean
属性名为favorite
。
现在我想概括一下并创建用户自定义Foo
列表,这样用户就可以创建自定义列表并添加任意数量的对象。
我希望使用一个名为UserFooList
的新类来实现此功能,该类基本上包含name
和RealmList<Foo>
个元素。
在迁移过程中,我创建了这个带有字段的新类。
这很容易,但这里有困难的部分:
我想将标有Foo
的所有先前favorite
项添加到新的UserFooList
,然后删除现在未使用的Foo
字段{{1 }}
一些有助于澄清的代码:
当前班级
favorite
更改了课程
public class Foo extends RealmObject{
private String title;
private boolean favorite;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isFavorite() {
return favorite;
}
public void setFavorite(boolean favorite) {
this.favorite = favorite;
}
}
新课程
public class Foo extends RealmObject{
//favorite field will be removed
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
我想插入一个public class UserFooList extends RealmObject{
private String name;
private RealmList<Foo> items;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public RealmList<Foo> getItems() {
return items;
}
public void setItems(RealmList<Foo> items) {
this.items = items;
}
}
实例并用以下内容填充:
UserFooList
:&#34;收藏夹&#34; name
:items
Foo
个实例
我希望在迁移期间执行此操作,因为这样我可以在新创建的列表中插入所有元素后删除favorite == true
字段。
答案 0 :(得分:5)
依靠DynamicRealm API的强大功能。
public class MyMigration implements Realm.Migration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema foo = schema.get("Foo");
RealmObjectSchema userFooList = schema.create("UserFooList");
userFooList.addField("name", String.class);
userFooList.addRealmListField("items", foo);
DynamicRealmObject userList = realm.createObject("UserFooList");
userList.setString("name", "favorites");
RealmList<DynamicRealmObject> listItems = userList.getList("items");
RealmResults<DynamicRealmObject> favoriteFoos = realm.where("Foo").equalTo("favorite", true).findAll();
for(DynamicRealmObject fooObj: favoriteFoos) {
listItems.add(fooObj);
}
foo.removeField("favorite");
oldVersion++;
}
}
@Override public boolean equals(Object object) {
return object != null && object instanceof MyMigration;
}
@Override public int hashCode() {
return MyMigration.class.hashCode();
}
}