【问题标题】:Realm add two tables without loosing any data领域添加两个表而不会丢失任何数据
【发布时间】:2020-07-21 19:08:47
【问题描述】:

我想添加两个表而不丢失旧表中的任何数据。所以我创建了表 “情感”

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

【问题讨论】:

  • 试试.schemaVersion(6)而不是5?
  • @Yupi 谢谢,它的工作。但对我来说不清楚,因为我需要添加新表,为此我的.schemaVersion(5)RealmMigrations 我检查了if(oldVersion == 5) 然后我添加新表
  • 我觉得你做的很对,试试看就知道了

标签: android realm


【解决方案1】:

所以你只需要升级 schemaVersion() ,在你的情况下是 6 而不是 5。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2020-02-13
    相关资源
    最近更新 更多