android - 每当我创建一个新的领域类时,我都会收到迁移错误?
问题描述
我创建了一个扩展 RealmObject 的类,每当我尝试运行该类时,我都会得到 runTime 异常,如下所示:
06-09 00:58:16.333 30719-30719/com.khaalijeb.inkdrops E/AndroidRuntime:致命异常:主进程:com.khaalijeb.inkdrops,PID:30719 io.realm.exceptions.RealmMigrationNeededException:由于以下错误: - 添加了“transactionacknowledgedata”类。在 io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method) 在 io.realm.internal.OsSharedRealm.(OsSharedRealm.java:171) 在 io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:241) 在 io。 realm.BaseRealm.(BaseRealm.java:136) 在 io.realm.BaseRealm.(BaseRealm.java:105) 在 io.realm.Realm.(Realm.java:164) 在 io.realm.Realm.createInstance(Realm. java:435) 在 io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:
我不知道为什么我会收到这个错误。有没有人遇到过这个问题?
解决方案
记住在 SQLite 中你想添加一个表时,你必须这样做:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
int currentVersion = oldVersion;
if(currentVersion == 1) {
db.execSql("CREATE TABLE Blah(personId int, name varchar(255))");
currentVersion++;
}
...
}
等等?
好吧,Realm 不是 SQLite,但它仍然需要您修改架构以添加新的模型类并应用您想要的架构更改。
因此,您需要定义一个迁移(请参阅文档中有关它的整个部分)来处理从 X 到 Y 的架构版本更改。
因此,您创建了一个迁移:
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
...
}
@Override
public int hashCode() { return Migration.class.hashCode(); }
@Override
public boolean equals(Object obj) { return obj != null && obj instanceof Migration; }
}
Bump 架构版本并指定迁移到 RealmConfiguration
Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
.schemaVersion(currentVersion+1) // probably a constant somewhere
.migration(new Migration())
.build());
而且您实际上需要使用添加新添加的类的 DynamicRealm API 来编写迁移。
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema transactionacknowledgedata =
schema.create("transactionacknowledgedata");
transactionacknowledgedata.addField("name", String.class);
oldVersion++;
}
}
好吧,要么就是这样,要么你设置new RealmConfiguration.Builder().deleteIfMigrationNeeded().build()
,只要有模型更改,你就会删除(并重新创建)领域。
推荐阅读
- python - 如何插入缺失的奖励矩阵条目(Q-learning)?
- java - 如何配置 TestNG 在 IntelliJ 中只运行一个测试用例?
- node-red - 在 Raspberry Pi 4 上运行的 Azure Edge 中的 Node-RED 模块提示“退避”错误
- tvos - 如何为 tvOS 包含 1x 1080p 和 2x 4K 视频资产
- python - 熊猫,更改数据框中的特定单元格
- c# - prim 算法生成迷宫缺失的墙壁
- css - 即使我有自定义 webpack.config.js,webpack 也会继续使用默认配置
- python - Discord.py 在单独的线程上运行命令
- excel - 复制其中包含 NaN 值的列并添加前缀
- ios - 如何在 Swift 5 中的 Xcode Playground 中创建委托设计模式?