Я получаю ошибку миграции всякий раз, когда я создаю новый класс Realm? - PullRequest
0 голосов
/ 08 июня 2018

Я создал класс, который расширяет RealmObject, и всякий раз, когда я пытаюсь запустить класс, я получаю исключение runTime следующим образом:

06-09 00: 58: 16.333 30719-30719 / com.khaalijeb.inkdrops E / AndroidRuntime: ФАКТИЧЕСКОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.khaalijeb.inkdrops, PID: 30719 io.realm.exceptions.RealmMigrationNeededException: требуется миграция из-за следующих ошибок: - добавлен класс'actionacknownowgedgedata '.в io.realm.internal.OsSharedRealm.nativeGetSharedRealm (собственный метод) в io.realm.internal.OsSharedRealm. (OsSharedRealm.java:171) в io.realm.internal.OsSharedRealm.getInstance (OsSha)realm.BaseRealm. (BaseRealm.java:136) в io.realm.BaseRealm. (BaseRealm.java:105) в io.realm.Realm. (Realm.java:164) в io.realm.Realm.createInstance (Realm.Java: 435) в io.realm.RealmCache.doCreateRealmOrGetFromCache (RealmCache.java:342) в io.realm.RealmCache.createRealmOrGetFromCache (RealmCache.java:282) в io.realm.ef.jpgcom.khaalijeb.inkdrops.Fragment.NewPendingFragment.onCreate (NewPendingFragment.java:147) в android.support.v4.app.Fragment.performCreate (Fragment.java:2236) в android.support.v4.app.FragmentManTomptate.mFragmentManager.java:1285) в android.support.v4.app.FragmentTransition.addToFirstInLastOut (FragmentTransition.java:1085) в android.support.v4.app.FragmentTransition.calculateFragments (FragmentTransition.java:976)в.(FragmentManager.java:2155) в android.support.v4.app.FragmentManagerImpl.execSingleAction (FragmentManager.java:2034) в android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss (BackStackRec26supp. At .6v4.app.FragmentPagerAdapter.finishUpdate (FragmentPagerAdapter.java:143) в android.support.v4.view.ViewPager.populate (ViewPager.java:1268) в android.support.v4.view.ViewPager.populate (ViewPager.java:1116) на android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1642) на android.view.View.measure (View.java:23167) на android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:715)) на android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) на android.view.View.measure (View.java:23167) наandroid.widget.RelativeLayout.measureChildHor horizontal (RelativeLayout.java:715) в android.widget.RelativeLayout.onMeasure (RelativeLayout.java:461) в android.view.View.measure (View.java:23167) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6749) в android.widget.FrameLayout.onMeasure (FrameLayout.java:185) в android.view.View.measure (View.java:23167) в android.view.ViewGroup.measureChildWithMroupgins (Java: 6749) на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) на android.support.v7.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:139) на android.view.View.measure (View.java): 23167) по адресу android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6749) по адресу android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1535) по адресу android.widget.LinearLayout.measureVartj.jar) и линейный (.widget.LinearLayout.onMeasure (LinearLayout.java:704) в android.view.View.measure (View.java:23167) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6749)на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) на android.view.View.measure (View.java:23167) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6749) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1535) в android.widget.LinearLayout.measureVertical (LinearLayout.java:825) в android.widget.LinearLayout.onMeasure (LinearLayout.java:view. (..java: 23167) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6749) в android.widget.FrameLayout.onMeasure (FrameLayout.java:185) в com.android.internal.policy.DecorView.onMeasure (DecorView.Java: 716) 06-09 00: 58: 16.334 30719-30719 / com.khaalijeb.inkdrops E / AndroidRuntime: at android.view.View.measure (View.java:23167) в android.view.ViewRootImpl.performMeasure (ViewRootImpl.java: 2693) в android.view.ViewRootImpl.measureHierarchy (ViewRootImpl.java:1559) в android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1830) в android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1447) на android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:7130) на android.view.Choreographer $ CallbackRecord.run (Choreographer.java:935Call) в android.(Choreographer.java:747) на android.view.Choreographer.doFrame (Choreographer.java:682) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:921) на android.os.Handler.handleCall.Java: 873) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:193) на android.app.ActivityThread.main (ActivityThread.java:6642) наjava.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 858)

Я не знаю, почему я получаю эту ошибку.Кто-нибудь там сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 09 июня 2018

Помните, когда в SQLite вы хотели добавить таблицу, вам пришлось сделать следующее:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    int currentVersion = oldVersion;
    if(currentVersion == 1) {
        db.execSql("CREATE TABLE Blah(personId int, name varchar(255))");
        currentVersion++;
    }
    ...
}

И так далее?

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

Таким образом, вам нужно определить миграцию ( см. весь этот раздел в документации ), которая обрабатываетверсия схемы изменится с X на Y.


Итак, вы создадите миграцию:

public class Migration implements RealmMigration {

    @Override
    public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
        ...
    }

    @Override
    public int hashCode() { return Migration.class.hashCode(); }

    @Override
    public boolean equals(Object obj) { return obj != null && obj instanceof Migration; }
}

Увеличьте версию схемы и укажите миграцию в RealmConfiguration

Realm.setDefaultConfiguration(new RealmConfiguration.Builder()
                                    .schemaVersion(currentVersion+1) // probably a constant somewhere
                                    .migration(new Migration())
                                    .build());

И вам на самом деле нужно написать миграцию с помощью API DynamicRealm, который добавляет вновь добавленный класс.

@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
    RealmSchema schema = realm.getSchema();
    if(oldVersion == 0) {
        RealmObjectSchema transactionacknowledgedata = 
                               schema.create("transactionacknowledgedata");
        transactionacknowledgedata.addField("name", String.class);
        oldVersion++;
    }
}


Ну, либо это так, либо вы установили new RealmConfiguration.Builder().deleteIfMigrationNeeded().build() и выЯ буду удалять (и воссоздавать) Царство всякий раз, когда происходит изменение модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...