Realm新增productsList字段触发MigrationNeededException如何解决
修复方案
核心问题
你新增了FuelStationBean的productsList字段后,仅升级了schema版本,没有在迁移类中补充对应字段的添加逻辑,且RealmList<String>属于特殊集合类型,需要用Realm专门的API添加。
步骤1:修改RealmMigration迁移类
补充版本1升级到版本2的迁移逻辑,代码如下:
public class RealmMigration implements io.realm.RealmMigration { @Override public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { RealmSchema schema = realm.getSchema(); if (oldVersion == 0) { schema.get("FuelStationBean") .addField("ladestation", boolean.class) .addField("ladepunkt", String.class); oldVersion++; } // 新增版本1升2的逻辑,添加productsList字段 if (oldVersion == 1) { schema.get("FuelStationBean") .addRealmListField("productsList", String.class); oldVersion++; } } }
步骤2:确认Realm初始化配置的schema版本
将initRealm方法中的schemaVersion设置为2,和迁移逻辑的最终版本对齐:
RealmConfiguration config = new RealmConfiguration.Builder() .schemaVersion(2) .migration(new RealmMigration()) // 注意:仅开发测试阶段可加下面这行避免迁移报错,上线版本必须删除,否则会清空用户所有Realm数据 // .deleteRealmIfMigrationNeeded() .build();
注意事项
- 上线版本严禁使用
deleteRealmIfMigrationNeeded配置,会丢失所有用户本地存储的Realm数据 - 如果修改后仍有报错,先卸载测试设备上的旧版本应用再重新安装测试,避免本地缓存的旧版本Realm文件干扰
内容的提问来源于stack exchange,提问作者Razvan22
相关产品推荐
相关产品推荐

