レルムのAndroidには新しく、現在私のプロジェクトでレルムを使用する必要がありますが、私はアプリを開く度に頻繁に起こるこのエラーCannot migrate a Realm file that is already open
。ここですでに開いているレルムファイルをマイグレートできません〜レルム〜Android
FATAL EXCEPTION: main
Process: com.etobee.driver, PID: 31866
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.etobee.driver/com.etobee.driver.activity.HomeActivity}: java.lang.IllegalStateException: Cannot migrate a Realm file that is already open: /data/data/com.etobee.driver/files/default6
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
Caused by: java.lang.IllegalStateException: Cannot migrate a Realm file that is already open: /data/data/com.etobee.driver/files/default6
at io.realm.BaseRealm$3.onResult(BaseRealm.java:740)
at io.realm.RealmCache.invokeWithGlobalRefCount(RealmCache.java:274)
at io.realm.BaseRealm.migrateRealm(BaseRealm.java:735)
at io.realm.Realm.migrateRealm(Realm.java:1361)
at com.etobee.driver.util.RealMHelper.init(RealMHelper.java:35)
at com.etobee.driver.activity.DefaultActivity.onCreate(DefaultActivity.java:138)
at com.etobee.driver.activity.HomeActivity.onCreate(HomeActivity.java:91)
at android.app.Activity.performCreate(Activity.java:5975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
at android.app.ActivityThread.access$800(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
は私が私の主な活動にonCreate
の内側にこれを呼んで、レルムを初期化する方法です。
public static void init(Context context){
// Create a RealmConfiguration that saves the Realm file in the app's "files" directory.
RealmConfiguration config0 = new RealmConfiguration.Builder(context)
.name("default6")
.schemaVersion(7)
.build();
try {
Realm.migrateRealm(config0, new RealmMigration() { /**--- ERROR HERE **/
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
}
});
} catch (FileNotFoundException ignored) {
// If the Realm file doesn't exist, just ignore.
}
Realm.setDefaultConfiguration(config0);
}
常に起こるとは限りませんが、ランダムに起こることはありますが、かなり頻繁に起こります。私はこの問題を探しましたが、まだ何も見つかりませんでした。 助けてください。
ありがとうございます。
'のinit()は'呼ばれたとき? – EpicPandaForce
@EpicPandaForceそれは私のmainActivityでonCreateの中で呼び出されました –
私はあなたが上のコードで回転していることを保証します:特に 'onDestroy()'で 'close()'を呼び出さない場合 – EpicPandaForce