“realm migration needed”,从realm db中检索值时android中的异常

时间:2015-11-26 13:42:54

标签: android realm

我在我的应用程序中使用Realm作为后端。我创建了一个名为Setting的表。我按照Realm官方网站上给出的步骤在该表中添加了值。 但是当我要从该表中检索值时,我得到了异常

  

“io.realm.exceptions.RealmMigrationNeededException:必须提供RealmMigration”:“realm = Realm.getInstance(getApplicationContext());”。

实际上,我是Android和Realm的新手,因此找不到解决问题的方法。

4 个答案:

答案 0 :(得分:73)

  

编辑:对于新版本的Realm,添加了Realm.init(上下文上下文)

Realm.init(context);    
RealmConfiguration config = new RealmConfiguration
                                     .Builder()
                                     .deleteRealmIfMigrationNeeded()
                                     .build();

注意:使用此配置选项,任何架构更改都将导致 数据丢失,具体为:

  • 添加/删除字段
  • 添加了一个新的RealmObject类
  • 删除现有的RealmObject
  • @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()
        }