Realm.getDefaultInstance();错误

Realm.getDefaultInstance(); error

该应用程序最初运行良好。但我决定 创建包 以使其更有条理。另外,我创建了一个名为 Allegren 的新 Class;并在其中生成 getter 和 setter。您可以在下面看到 OcrApplication class(这是错误所在)。

OcrApplicationclass

package com.google.android.gms.samples.vision.ocrreader;


import com.google.android.gms.samples.vision.ocrreader.R;
import com.google.android.gms.samples.vision.ocrreader.realm.ingredients.Allergen;
import com.google.android.gms.samples.vision.ocrreader.realm.ingredients.Ingredient;

import io.realm.Realm;


public class OcrApplication extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        Realm realm = Realm.getDefaultInstance();


        Allergen first_item = new Allergen();
        first_item.setName("FirstItem");
        first_item.setChecked(false);

        Ingredient aqua = new Ingredient();
        aqua.setName("Aqua");
        aqua.setDescription(getString(R.string.low)+ getString(R.string.aqua));

realm.beginTransaction();
realm.copyToRealm(first_item);
realm.copyToRealm(aqua);
realm.commitTransaction();
}
}

Logcat

Caused by: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
    - Class 'Allergen' 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:136)
        at io.realm.BaseRealm.<init>(BaseRealm.java:105)
        at io.realm.Realm.<init>(Realm.java:164)
        at io.realm.Realm.createInstance(Realm.java:435)
        at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:342)
        at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:282)
        at io.realm.Realm.getDefaultInstance(Realm.java:343)
        at com.google.android.gms.samples.vision.ocrreader.OcrApplication.onCreate(OcrApplication.java:14)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1014)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4855)

每次在 Realm 中添加新的 table 或编辑现有的迁移时,都需要创建新的迁移,否则会出现此错误。擦除数据库,然后像您一样从头开始重新创建它,也可以解决问题,但这是不好的做法,主要用于开发应用程序,而不是发布应用程序时。

您可以在官方 Realm Docs 中阅读有关领域迁移的更多信息。