Realm 添加两个表而不丢失任何数据

Realm add two tables without loosing any data

我想在不丢失旧 table 的任何数据的情况下添加两个 table。所以我创建了 table "Emotion"

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

和情感价值

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);。我的问题是,如何在不丢失旧数据库中的任何数据的情况下向现有数据库添加一些 table?

因此您还需要升级 schemaVersion(),在您的情况下是 6 而不是 5。