【问题标题】:io.realm.exceptions.RealmMigrationNeededException: The 'ImportantCalls' class is missing from the schema for this Realm?io.realm.exceptions.RealmMigrationNeededException:此领域的架构中缺少“ImportantCalls”类?
【发布时间】:2017-07-04 07:59:39
【问题描述】:

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

    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); 删除了领域数据库中的数据;

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

【问题讨论】:

  • 您的迁移说的是 v5,但在您的代码中,您将类添加到 v1。 2-5 发生了什么?
  • @Christian Melchior 我想在我的代码中更改什么
  • @PrabhaKaran 您需要版本 2 到 5 的迁移步骤吗?

标签: android realm realm-migration


【解决方案1】:

首先,清理项目并重建它。然后,检查您的数据库是否不存在,但您得到它并显示到 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");
            }
        }

    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多