Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

Вы изменили что-то на структуру сферы.

Чтобы исправить это, вы должны включить migration или просто удалите приложение и установите его снова.

Ответ 4

Это работает для меня

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

    }