Realm добавить две таблицы без потери данных - PullRequest
1 голос
/ 09 апреля 2020

Я хочу добавить две таблицы без потери данных из старых таблиц. Итак, я создал таблицу "Emotion"

public class Emotion extends RealmObject {
    private String uuid;
    private String name;

и EmotionValue

public class EmotionValue extends RealmObject {

    private String uuid;
    private String emotionId;
    private String name;

Мой RealmMigrations имеет этот код

public class RealmMigrations implements RealmMigration {

    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        final RealmSchema schema = realm.getSchema();

...

    if(oldVersion == 5) {
                schema.create("Emotion")
                        .addField("uuid", String.class)
                        .addField("name", String.class);

                schema.create("EmotionValue")
                        .addField("uuid", String.class)
                        .addField("emotionId", String.class)
                        .addField("name", String.class);

                oldVersion++;
            }

, а мой App имеет

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(getApplicationContext());
        RealmConfiguration config = getRealmConfig("superdatabase");
        Realm.setDefaultConfiguration(config);

        Stetho.initialize(
                Stetho.newInitializerBuilder(this)
                        .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                        .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build())
                        .build());
    }

    public static RealmConfiguration getRealmConfig(String name) {
        return new RealmConfiguration.Builder()
                .name(name)
                .schemaVersion(5)
                .migration(new RealmMigrations())
                .build();
    }
}

при запуске приложения появляется ошибка:

  Caused by: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
    - Class 'Emotion' has been added.
    - Class 'EmotionValue' has been added.
        at io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method)
        at io.realm.internal.OsSharedRealm.<init>(OsSharedRealm.java:171)
        at io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:241)
        at io.realm.BaseRealm.<init>(BaseRealm.java:135)
        at io.realm.BaseRealm.<init>(BaseRealm.java:103)
        at io.realm.Realm.<init>(Realm.java:163)
        at io.realm.Realm.createInstance(Realm.java:499)
        at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:341)
        at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:284)
        at io.realm.Realm.getInstance(Realm.java:428)
        at com.timecontrolapp.models.App.onCreate(App.java:17)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553)

в com.timecontrolapp.models.App.onCreate (App. java: 17) содержит эту строку Realm.setDefaultConfiguration(config);. У меня вопрос, как я могу добавить несколько таблиц в свою существующую базу данных, не теряя данных из старой базы данных?

1 Ответ

1 голос
/ 09 апреля 2020

Так что вам нужно просто обновить schemaVersion (), что в вашем случае 6 вместо 5.

...