«Требуется миграция области», исключение в андроиде при извлечении значений из realm db

Я использую Realm в качестве задней части приложения. Я создал одну таблицу с именем Setting. Я добавил значения в эту таблицу, выполнив шаги, указанные на официальном сайте Realm. Но когда я собираюсь получить значения из этой таблицы, я получаю исключение

"Io.realm.exceptions.RealmMigrationNeededException: RealmMigration должен быть предоставлен" в строке: "realm = Realm.getInstance (getApplicationContext ());".

На самом деле, я новичок в андроиде и королевстве, поэтому нахожу проблему, чтобы понять, что является проблемой.

Solutions Collecting From Web of "«Требуется миграция области», исключение в андроиде при извлечении значений из realm db"

EDIT: для новых версий 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(); 

Если вы загружаете приложение в хранилище, «удалить и переустановить приложение» не будет работать на другого пользователя, поэтому вы должны работать с «удалением» области и «переустановкой» области, а не приложения. Вот способ сделать это, надеюсь, что это поможет!

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