実際、Realm の移行例はこのシナリオを示しています。
public class Migration implements RealmMigration {
@Override
public long execute(Realm realm, long version) {
// Step 0
if (version == 0) {
//Do the migration from 0 to 1
version++;
}
// Step 1
// Now the version is at least 1
if (version == 1) {
// Do the migration from 1 to 2
version++;
}
// Step 2
if (version == 2) {
// Do the migration from 2 to 3
version++;
}
// Now you get your final version 3
return version;
}
}
移行を段階的に記述し、最新のスキーマ バージョンを取得するまで 1 つずつ実行するだけです。あなたの場合、ユーザーはここで Realm db バージョン 0 を持っている可能性があり、step0 が最初に実行されます。その後、ステップ 0 ブロックでバージョンが 1 に上がり、ステップ 1 が実行されます。
------------ ユーザーがバージョン 3 を直接インストールする場合の更新 ------------
レルム インスタンスを作成すると、コードは次のようになります。
RealmConfiguration config = new RealmConfiguration.Builder(this)
.migration(migration)
.schemaVersion(3)
.build();
Realm realm = Realm.getInstance(config);
ここに注意してschemaVersion(3)
ください。RealmMigration.execute()
移行が必要な場合にのみ実行されます。これは、ユーザーが以前のバージョンをデバイスにインストールせずにバージョン 3 を直接インストールした場合、 はRealmMigration.execute()
呼び出されず、Realm ファイルが初期化された後にスキーマ バージョンが 3 に設定されることを意味します。