“领域迁移​​需要”,android中的exception,而从领域数据库检索值

我在我的应用程序中使用Realm作为后端。 我创build了一个名为设置的表。 我按照Realm官方网站上给出的步骤在表格中添加了值。 但是当我要从那个表中检索值的时候,我变得exception了

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

实际上,我对android和Realm是新手,所以find麻烦去了解是什么问题。

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

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

注:使用此configuration选项, 任何模式更改都将导致 数据丢失 ,具体为:

  • 一个字段被添加/删除
  • 一个新的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(); 

如果你上传的应用程序存储,“删除并重新安装应用程序”不会工作给其他用户,所以你必须“删除”领域和“重新安装”领域,而不是应用程序。 这是做的方式,希望它会帮助!

  RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build(); try { return Realm.getInstance(realmConfiguration); } catch (RealmMigrationNeededException e){ try { Realm.deleteRealm(realmConfiguration); //Realm file has been deleted. return Realm.getInstance(realmConfiguration); } catch (Exception ex){ throw ex; //No Realm file to remove. } } 

编辑

对于最新的Realm(3.0.0),Realm已经改变了构造函数的结构,所以你必须这样做:

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

你把某些东西改成了领域结构。

为了解决它,你应该包括迁移或简单地删除应用程序,并再次安装。

这对我行得通

  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); }