在 android 中将领域版本从 0.82.1 更改为 0.87.5 后发生致命异常崩溃
fatal exception crash after changing realm version from 0.82.1 to 0.87.5 in android
将领域的版本从 0.82.1 更改为 0.87.5 后出现此错误。
FATAL EXCEPTION: main Process: com.xxxxx.consumer, PID: 8633
java.lang.RuntimeException: Unable to create applicationcom.gemba.consumer.realm.AppInstance:
java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file.
Cached configuration:
realmFolder: /data/user/0/com.xxxx.consumer/files
realmFileName : default.realm
canonicalPath: /data/data/com.xxxx.consumer/files/default.realm
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: true
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@b40b99c9
我的领域管理器class是这个
public 最终 class RealmManager {
public static RealmManager realmManager;
public static RealmConfiguration realmConfig;
public static Realm realm;
public static WorkerThread workerThread;
public static Context appContext;
public static RealmManager getInstance(Context context) {
if (realmManager == null) {
realmManager = new RealmManager();
getRealmConfig(context);
realm = Realm.getInstance(realmConfig);
workerThread = new WorkerThread(context);
appContext = context;
}
return realmManager;
}
public static RealmConfiguration getRealmConfig(Context context) {
if (realmConfig == null) {
realmConfig = new RealmConfiguration.Builder(context)
.deleteRealmIfMigrationNeeded()
.build();
}
return realmConfig;
}
我在应用程序 class.
中这样使用它
RealmManager.getInstance(getApplicationContext());
每个 Realm
实例都是基于 RealmConfiguration
.
创建的
当 getInstance()
在 RealmConfiguration
上调用指向一个已经在另一个 RealmConfiugration
上打开的 Realm 文件(相同的文件路径)时,新配置必须相同与旧的。
getInstance(Context context)
的实现如下所示。
public static Realm getInstance(Context context) {
return Realm.getInstance(new RealmConfiguration.Builder(context)
.name(DEFAULT_REALM_NAME)
.build());
}
当你打电话时
RealmManager.getInstance(getApplicationContext());
在应用程序的文件目录中使用默认领域名称“default.realm隐式创建了 RealmConfiguration
。它与您在 getRealmConfig
中创建的不同——没有 deleteRealmIfMigrationNeeded()
.
要解决此问题,只需在所有地方使用 getRealmConfig
返回的相同配置。顺便说一句,您的 getRealmConfig()
不是线程安全的,如果它将在不同的线程中调用,您可能需要修复它。
Realm.getInstance(Context context)
在 Realm 0.88.0 中被弃用。
将领域的版本从 0.82.1 更改为 0.87.5 后出现此错误。
FATAL EXCEPTION: main Process: com.xxxxx.consumer, PID: 8633
java.lang.RuntimeException: Unable to create applicationcom.gemba.consumer.realm.AppInstance:
java.lang.IllegalArgumentException: Configurations cannot be different if used to open the same file.
Cached configuration:
realmFolder: /data/user/0/com.xxxx.consumer/files
realmFileName : default.realm
canonicalPath: /data/data/com.xxxx.consumer/files/default.realm
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: true
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@b40b99c9
我的领域管理器class是这个 public 最终 class RealmManager {
public static RealmManager realmManager;
public static RealmConfiguration realmConfig;
public static Realm realm;
public static WorkerThread workerThread;
public static Context appContext;
public static RealmManager getInstance(Context context) {
if (realmManager == null) {
realmManager = new RealmManager();
getRealmConfig(context);
realm = Realm.getInstance(realmConfig);
workerThread = new WorkerThread(context);
appContext = context;
}
return realmManager;
}
public static RealmConfiguration getRealmConfig(Context context) {
if (realmConfig == null) {
realmConfig = new RealmConfiguration.Builder(context)
.deleteRealmIfMigrationNeeded()
.build();
}
return realmConfig;
}
我在应用程序 class.
中这样使用它RealmManager.getInstance(getApplicationContext());
每个 Realm
实例都是基于 RealmConfiguration
.
当 getInstance()
在 RealmConfiguration
上调用指向一个已经在另一个 RealmConfiugration
上打开的 Realm 文件(相同的文件路径)时,新配置必须相同与旧的。
getInstance(Context context)
的实现如下所示。
public static Realm getInstance(Context context) {
return Realm.getInstance(new RealmConfiguration.Builder(context)
.name(DEFAULT_REALM_NAME)
.build());
}
当你打电话时
RealmManager.getInstance(getApplicationContext());
在应用程序的文件目录中使用默认领域名称“default.realm隐式创建了 RealmConfiguration
。它与您在 getRealmConfig
中创建的不同——没有 deleteRealmIfMigrationNeeded()
.
要解决此问题,只需在所有地方使用 getRealmConfig
返回的相同配置。顺便说一句,您的 getRealmConfig()
不是线程安全的,如果它将在不同的线程中调用,您可能需要修复它。
Realm.getInstance(Context context)
在 Realm 0.88.0 中被弃用。