簡體   English   中英

如何在Android中的Realm Migration上添加新類上的現有對象

[英]How to add existing objects on a new class on Realm Migration in Android

我有一個生產應用程序,因此必須使用RealmMigration

我查看了文檔和這個示例,但我沒有找到如何執行以下操作。

在當前版本中,我有Foo類型的項目,它有一個名為favoriteboolean屬性。 現在我想概括一下並創建用戶自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM