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 中阅读有关领域迁移的更多信息。
该应用程序最初运行良好。但我决定 创建包 以使其更有条理。另外,我创建了一个名为 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 中阅读有关领域迁移的更多信息。