领域备份和迁移到新版本
Realm Backup and Migration to a new version
我正面临一个问题,即尝试将旧的 Realm 结构迁移到具有新的 RealmObject 和参数的新结构。问题是,该应用程序已经在 Google Play 中,因此用户已经将特定数据存储在某些表中。目标是在删除领域数据库之前恢复数据并将其存储在其他地方。我现在很纠结怎么办。
为了解决这个问题,我在我的应用程序 class 中实施了以下内容:
RealmMigration migration = new RealmMigration(){
@Override
public void migrate(...){
if(oldVersion == 0){
//Get the data from realm and store somewhere else
}
}
}
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(1)
.migration(migration)
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(realmConfiguration);
Realm.getInstance(realmConfiguration);
这里的问题是,这样做,执行了方法deleteRealmIfMigrationNeeded()而没有执行migration(),那么在我从数据库中获取数据之前所有数据都丢失了。我想要的是,在更新应用程序时,我可以从数据库中获取版本,比较它是否是旧版本并将 Realm 中的数据存储在文件中,然后执行 deleteRealmIfMigrationNeeded() 以避免RealmMigrationNeededException。
我通过在 migrate() 方法中添加正确的 RealmSchema 解决了这个问题。类似于:
RealmMigration migration = new RealmMigration(){
@Override
public void migrate(...){
final RealmSchema = relam.getSchema();
if(oldVersion == 0){
if(!schema.get("Person").getPrimaryKey().equals("codePerson")){
schema.get("Person")
.removePrimaryKey()
.addPrimaryKey("codePerson");
}
//There are other similar statements here
}
}
}
然后我从 RealmConfiguration 中删除了 deleteRealmIfMigrationNeeded() 方法。
它解决了 RealmMigrationNeededException,因此应用程序正确启动。
我正面临一个问题,即尝试将旧的 Realm 结构迁移到具有新的 RealmObject 和参数的新结构。问题是,该应用程序已经在 Google Play 中,因此用户已经将特定数据存储在某些表中。目标是在删除领域数据库之前恢复数据并将其存储在其他地方。我现在很纠结怎么办。
为了解决这个问题,我在我的应用程序 class 中实施了以下内容:
RealmMigration migration = new RealmMigration(){
@Override
public void migrate(...){
if(oldVersion == 0){
//Get the data from realm and store somewhere else
}
}
}
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(1)
.migration(migration)
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(realmConfiguration);
Realm.getInstance(realmConfiguration);
这里的问题是,这样做,执行了方法deleteRealmIfMigrationNeeded()而没有执行migration(),那么在我从数据库中获取数据之前所有数据都丢失了。我想要的是,在更新应用程序时,我可以从数据库中获取版本,比较它是否是旧版本并将 Realm 中的数据存储在文件中,然后执行 deleteRealmIfMigrationNeeded() 以避免RealmMigrationNeededException。
我通过在 migrate() 方法中添加正确的 RealmSchema 解决了这个问题。类似于:
RealmMigration migration = new RealmMigration(){
@Override
public void migrate(...){
final RealmSchema = relam.getSchema();
if(oldVersion == 0){
if(!schema.get("Person").getPrimaryKey().equals("codePerson")){
schema.get("Person")
.removePrimaryKey()
.addPrimaryKey("codePerson");
}
//There are other similar statements here
}
}
}
然后我从 RealmConfiguration 中删除了 deleteRealmIfMigrationNeeded() 方法。
它解决了 RealmMigrationNeededException,因此应用程序正确启动。