[英]How to add existing objects on a new class on Realm Migration in Android
我有一個生產應用程序,因此必須使用RealmMigration
我查看了文檔和這個示例,但我沒有找到如何執行以下操作。
在當前版本中,我有Foo
類型的項目,它有一個名為favorite
的boolean
屬性。 現在我想概括一下並創建用戶自定義Foo
列表,這樣用戶就可以創建自定義列表並添加任意數量的對象。 我想用一個名為UserFooList
的新類來實現它,該類具有基本name
和元素的RealmList<Foo>
。
在遷移過程中,我正在用它的字段創建這個新類。
這很容易,但這里有困難的部分:
我想將標記為favorite
所有以前的Foo
項添加到新的UserFooList
,然后刪除現在未使用的Foo
的字段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
實例並填充它:
name
:“收藏夾” items
:所有現有的Foo
實例, favorite == true
我想在遷移期間這樣做,因為這樣我可以在新創建的列表中插入所有元素后刪除favorite
字段。
依靠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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.