引起:java.lang.IllegalArgumentException:磁盘上的Realm比指定的更新:v3与v0?

时间:2017-07-03 05:29:08

标签: android realm

如何解决这个问题,我搜索结果我不知道如何解决结果。

我正在使用广播接收器来接收数据

   @Override
    public void onReceive(Context context, Intent intent) {

        Realm.init(context);
        realm = Realm.getDefaultInstance();
}

在广播接收器类中,我已经初始化了这个领域。问题发生在`realm = Realm.getDefaultInstance();行。请帮我解决这个问题。

应用程序的oncreate()方法中的领域初始化是

     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dash_board);
        Realm.init(this);
//        RealmConfiguration config = new RealmConfiguration.Builder()
//                .deleteRealmIfMigrationNeeded()
//                .build();
        RealmConfiguration config = new RealmConfiguration.Builder()
                .schemaVersion(3) // Must be bumped when the schema changes
                .migration(new Migration()) // Migration to run
                .build();

        Realm.setDefaultConfiguration(config);
//        Realm.deleteRealm(config);
        realm.getDefaultInstance();

我已经在活动中初始化了这个领域。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为触发广播接收器时未设置Realm.setDefaultInstance(config)

看起来您正在设置活动中的默认配置。你应该在Application.onCreate()代替。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
        RealmConfiguration config = new RealmConfiguration.Builder()
                .schemaVersion(3) // Must be bumped when the schema changes
                .migration(new Migration()) // Migration to run
                .build();
        Realm.setDefaultConfiguration(config);
    }
}

// Remember to set `name` in Manifest as well
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="io.realm.examples.intro" >
    <application android:name=".MyApplication">
        <!-- Activities -->
    </application>
</manifest>

答案 1 :(得分:2)

变化

@Override
public void onReceive(Context context, Intent intent) {

    Realm.init(context);
    realm = Realm.getDefaultInstance();

@Override
public void onReceive(Context context, Intent intent) {

    Realm.init(context);
    RealmConfiguration config = new RealmConfiguration.Builder()
            .schemaVersion(SCHEMA_VERSION) // Must be bumped when the schema changes
            .migration(new Migration()) // Migration to run
            .build();
    realm = Realm.getInstance(config);

在您的广播接收器中。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dash_board);
    Realm.init(this);
    RealmConfiguration config = new RealmConfiguration.Builder()
            .schemaVersion(SCHEMA_VERSION) // Must be bumped when the schema changes
            .migration(new Migration()) // Migration to run
            .build();

SCHEMA_VERSION属性移动到public static final int(常量)的位置。