io.realm.exceptions.RealmMigrationNeededException:' ImportantCalls'这个领域的架构缺少类?

时间:2017-07-04 07:59:40

标签: android realm realm-migration

我正面临领域迁移问题。我想在领域数据库中添加新的模型类。请帮我解决这个问题。

    public class Migration implements RealmMigration {
    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        RealmSchema schema = realm.getSchema();

        if (oldVersion==0){

            oldVersion ++;
        }

        if (oldVersion == 1) {

            schema.create("ImportantCalls")
                    .addField("id", int.class)
                    .addField("number", String.class)
                    .addField("callType", String.class)
                    .addField("startTime", String.class)
                    .addField("callRecords", String.class)
                    .addField("callStatus", String.class)
                    .addField("actualStartTime", Long.class);
            oldVersion++;
        }
    }

    @Override
    public int hashCode() {
        return 37;
    }

    @Override
    public boolean equals(Object o) {
        return (o instanceof Migration);
    }
}

以上代码用于迁移领域。

下面的代码是我在android中的oncreate()方法的初始化

       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dash_board);
        Realm.init(this);
//        RealmConfiguration config = new RealmConfiguration.Builder()
//                .deleteRealmIfMigrationNeeded()
//                .build();
        RealmConfiguration config = new RealmConfiguration.Builder()
                .schemaVersion(5) // Must be bumped when the schema changes
                .migration(new Migration()) // Migration to run
                .build();

        Realm.setDefaultConfiguration(config);
//        Realm.deleteRealm(config);
        realm.getDefaultInstance();

realm.getDefaultInstance(); in this line.

中发生异常

在进行迁移之前,我通过`Realm.deleteRealm(config);

删除了realm数据库中的数据

但实际上这不是一个好习惯,所以我试图迁移数据。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

首先,清理项目并重建它。然后,检查您的数据库是否存在,但是您获取并显示到UI。使用RealmObject.isValid()进行检查。例如:

 mInteractor.getOneDayData(dayOfWeek, new Repositories.Callback<OneDay>() {
        @Override
        public void onSuccess(OneDay item) {
            if (item.isValid()) { // please check if item is valid before you use it
                //udpate ui

            } else {
                mView.showToast("No data");
            }
        }

    });