我在我的应用程序中使用Realm作为后端。我创建了一个名为Setting的表。我按照Realm官方网站上给出的步骤在该表中添加了值。 但是当我要从该表中检索值时,我得到了异常
“io.realm.exceptions.RealmMigrationNeededException:必须提供RealmMigration”:“realm = Realm.getInstance(getApplicationContext());”。
实际上,我是Android和Realm的新手,因此找不到解决问题的方法。
答案 0 :(得分:73)
编辑:对于新版本的Realm,添加了Realm.init(上下文上下文)
Realm.init(context);
RealmConfiguration config = new RealmConfiguration
.Builder()
.deleteRealmIfMigrationNeeded()
.build();
注意:使用此配置选项,任何架构更改都将导致 数据丢失,具体为:
@Required
已添加/删除@PrimaryKey
已添加/删除@Index
已添加/删除因此,在应用处于开发阶段时,主要推荐使用它。
或者按照官方文档添加迁移:
https://realm.io/docs/java/latest/#migrations
例如,
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 0) {
RealmObjectSchema personSchema = schema.get("Person");
personSchema
.addField("fullName", String.class, FieldAttribute.REQUIRED);
oldVersion++;
...
// hash code, equals
和
Realm.init(context);
RealmConfiguration config = new RealmConfiguration.Builder()
.migration(new Migration())
// .deleteRealmIfMigrationNeeded()
.build();
答案 1 :(得分:13)
你改变了领域结构。
要修复它,您应该包含migration 或者只是删除应用程序并重新安装。
答案 2 :(得分:5)
这对我有用
Realm.init(context);
Realm realm;
try{
realm = Realm.getDefaultInstance();
}catch (Exception e){
// Get a Realm instance for this thread
RealmConfiguration config = new RealmConfiguration.Builder()
.deleteRealmIfMigrationNeeded()
.build();
realm = Realm.getInstance(config);
}
答案 3 :(得分:-1)
Kotlin版本:
val realm = try {
Realm.init(this)
val config = RealmConfiguration.Builder()
.deleteRealmIfMigrationNeeded()
.build()
Realm.getInstance(config)
} catch (ex: RealmMigrationNeededException) {
Realm.getDefaultInstance()
}