无法迁移已打开~Realm~ Android的领域文件

无法迁移已打开~Realm~ Android的领域文件,android,realm,Android,Realm,我是Realm Android的新手,目前我需要在我的项目中使用Realm,但我经常遇到这样的问题:无法迁移已打开的Realm文件错误,每当我打开应用程序时,这种错误就会经常发生 FATAL EXCEPTION: main Process: com.etobee.driver, PID: 31866 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.etobee.driver/com.etobee.dri

我是Realm Android的新手,目前我需要在我的项目中使用Realm,但我经常遇到这样的问题:
无法迁移已打开的Realm文件
错误,每当我打开应用程序时,这种错误就会经常发生

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);
}
问题是它并不总是发生,它是随机发生的,但却经常发生。我已经搜索了这个问题,但是没有找到任何东西。 请帮忙

先谢谢你

static RealmConfiguration realmConfiguration = null;

public static void init(Context context){
    if(realmConfiguration == null) {
        // Create a RealmConfiguration that saves the Realm file in the app's "files" directory.
        realmConfiguration = new RealmConfiguration.Builder(context.getApplicationContext())
            .name("default6")
            .schemaVersion(7)
            .migration(new MyMigration())
            .build();
        Realm.setDefaultConfiguration(realmConfiguration);
    }
}

公共类MyMigration实现了RealMigration{
@凌驾
public void migrate(dynamicrelm领域、long oldVersion、long newVersion){
//dynamicrelm公开了一个可编辑的模式
RealmSchema schema=realm.getSchema();
//升级时,循环浏览每个版本。

对于(long version=oldVersion+1;version when is
init()
调用时?@EpicPandaForce它在我的main活动中的创建时在内部调用。我保证您将在旋转时崩溃,然后使用上面的代码:O,特别是如果您在
onDestroy()
中未调用
close()
添加此额外的catch语句:catch(IllegalStateException e){}。不过,理想情况下,您需要找到打开的领域并关闭它。循环用于什么?将领域从以前的版本迁移到特定版本
 public class MyMigration implements RealmMigration {
      @Override
      public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
          // DynamicRealm exposes an editable schema
          RealmSchema schema = realm.getSchema();
          // Loop through each version when an upgrade occurs.
          for (long version = oldVersion + 1; version <= newVersion; version++) {
              switch (version) {
                  case 1:
                     // migrate to version 1
                     break;
                  case 2:
                     // migrate to version 2
                     break;          
                  //...
                  case 7:
                     // migrate to version 7
                     break;
              }
          }
      }

      @Override
      public int hashCode() {
           return MyMigration.class.hashCode();
      }

      @Override
      public boolean equals(Object obj) {
           return obj != null && obj instanceof MyMigration;
      }
 }