如何在Android中迁移Realm
所以最近我进入了一个关于如何在领域中迁移东西的大问题。我终于解决了这个问题,所以我决定把它发布在stackoverflow上。请注意,Realm很快就会升级他们的系统,所以答案可能很快就会过时如何在Android中迁移Realm,android,database,migration,realm,realm-migration,Android,Database,Migration,Realm,Realm Migration,所以最近我进入了一个关于如何在领域中迁移东西的大问题。我终于解决了这个问题,所以我决定把它发布在stackoverflow上。请注意,Realm很快就会升级他们的系统,所以答案可能很快就会过时 代码用于领域80.3。这是我使用的代码: try { realm = Realm.getInstance(context, "database.realm"); Log.i("Database2", context.getFilesDir().getPath()); } catch (Re
代码用于领域80.3。这是我使用的代码:
try {
realm = Realm.getInstance(context, "database.realm");
Log.i("Database2", context.getFilesDir().getPath());
} catch (RealmMigrationNeededException ex) {
Realm.migrateRealmAtPath(context.getFileStreamPath("database.realm").getPath(), new RealmMigration() {
@Override
public long execute(Realm realm, long version) {
Log.i("Database", "Yay!");
// Migrate stuff...
Table table = realm.getTable(RealmTestObjectTwo.class);
table.addColumn(ColumnType.INTEGER, "key");
table.addColumn(ColumnType.STRING, "value");
table.setPrimaryKey("key");
version += 1;
// End Migrate Stuff...
return version;
}
});
}
让我明白的是,Realm希望您提供数据库文件的完整路径
希望这篇文章能帮助一些人 下面的类可以帮助您迁移领域数据库表(0.86.0+)
公共类迁移
实现重新配置{
@凌驾
public void migrate(最终DynamicRealm领域、长旧版本、长新版本){
Log.e(“标记”,旧版本+“-”+新版本);
RealmSchema RealmSchema=realm.getSchema();
如果(旧版本==0){
realmSchema.get(“节日模型”).addField(“时间戳”,Long.class,FieldAttribute.REQUIRED);
旧版本++;
}
如果(旧版本==1){
//添加新字段-匹配图像、列表图像、节日结束日期、isMatchedFestival
RealmObjectSchema festivalscema=realmSchema.get(“FestivalModel”);
List List=newarraylist(festivalscema.getFieldNames());
Log.e(“Fields”,list.toString());
节日场景
.addField(“isMatchedFestival”,Integer.class,FieldAttribute.REQUIRED)
.addField(“匹配图像”,String.class)
.addField(“排列\图像”,String.class)
.addField(“节日结束日期”,String.class)
.transform(新的RealmObjectSchema.Function(){
@凌驾
公共无效应用(dynamicrelamobjectobj){
//对象集(“isMatchedFestival”、“1”);
DynamicRealmObject festivalModel=realm.createObject(“festivalModel”);
节日模型setInt(“名称”,1);
}
});
//创建一个新类-ArtistFestivalModel
RealmObjectSchema artistFestivalModelSchema=realmSchema.create(“ArtistFestivalModel”)
.addField(“id”、String.class、FieldAttribute.PRIMARY_键)
.addField(“名称”,String.class)
.addField(“说明”,String.class)
.addField(“profile_image”,String.class)
.addField(“匹配图像”,String.class)
.addField(“排列\图像”,String.class)
.addField(“节日日期”,String.class)
.addField(“节日结束日期”,String.class)
.addField(“官方url”,String.class)
.addField(“地址”,String.class)
.addField(“纬度”、Double.class、FieldAttribute.REQUIRED)
.addField(“经度”,Double.class,FieldAttribute.REQUIRED)
.addField(“创建日期”,String.class)
.addField(“修改日期”,String.class)
.addField(“已删除”,String.class)
.addField(“timestamp”,Long.class,FieldAttribute.REQUIRED);
//创建一个新类-ArtistFestivalModel
RealmObjectSchema Festival AllineupSchema=realmSchema.create(“Festival Allineup”)
.addField(“id”、String.class、FieldAttribute.PRIMARY_键)
.addField(“名称”,String.class)
.addField(“profile_image”,String.class)
.addField(“官方url”,String.class)
.addField(“创建日期”,String.class)
.addField(“修改日期”,String.class)
.addField(“已删除”,String.class)
.addField(“列表”,String.class)
.addField(“festival alid”,String.class)
.addField(“类似”,Boolean.class,FieldAttribute.REQUIRED);
/**第一个上载的版本为0
*第二个上载版本,共1个
*第三个上载版本,共19个
*/
旧版本=19;
}
如果(旧版本==20){
//添加新字段-匹配图像、列表图像、节日结束日期、isMatchedFestival
RealmObjectSchema festivalscema=realmSchema.get(“FestivalModel”);
List List=newarraylist(festivalscema.getFieldNames());
Log.e(“Fields”,list.toString());
节日场景
.addField(“isMatchedFestival”,Integer.class,FieldAttribute.REQUIRED)
.addField(“匹配图像”,String.class)
.addField(“排列\图像”,String.class)
.addField(“节日结束日期”,String.class)
.transform(新的RealmObjectSchema.Function(){
@凌驾
公共无效应用(dynamicrelamobjectobj){
//对象集(“isMatchedFestival”、“1”);
DynamicRealmObject festivalModel=realm.createObject(“festivalModel”);
节日模型setInt(“名称”,1);
}
});
//创建一个新类-ArtistFestivalModel
RealmObjectSchema artistFestivalModelSchema=realmSchema.create(“ArtistFestivalModel”)
.addField(“id”、String.class、FieldAttribute.PRIMARY_键)
.addField(“名称”,String.class)
.addField(“说明”,String.class)
.addField(“profile_image”,String.class)
.addField(“匹配图像”,String.class)
.addField(“排列\图像”,String.class)
.addField(“节日日期”,String.class)
.addField(“节日结束日期”,String.class)
.addField(“官方url”,Strin
public class Migration
implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
Log.e("TAG", oldVersion + "-" + newVersion);
RealmSchema realmSchema = realm.getSchema();
if(oldVersion == 0) {
realmSchema.get("FestivalModel").addField("timestamp", Long.class, FieldAttribute.REQUIRED);
oldVersion++;
}
if(oldVersion == 1) {
//add new fields - match_image,lineup_image,festival_end_date,isMatchedFestival
RealmObjectSchema festivalscema = realmSchema.get("FestivalModel");
List<String> list = new ArrayList<>(festivalscema.getFieldNames());
Log.e("Fields", list.toString());
festivalscema
.addField("isMatchedFestival", Integer.class, FieldAttribute.REQUIRED)
.addField("match_image", String.class)
.addField("lineup_image", String.class)
.addField("festival_end_date", String.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
//obj.set("isMatchedFestival", "1");
DynamicRealmObject festivalModel = realm.createObject("FestivalModel");
festivalModel.setInt("name", 1);
}
});
// Create a new class - ArtistFestivalModel
RealmObjectSchema artistFestivalModelSchema = realmSchema.create("ArtistFestivalModel")
.addField("id", String.class, FieldAttribute.PRIMARY_KEY)
.addField("name", String.class)
.addField("description", String.class)
.addField("profile_image", String.class)
.addField("match_image", String.class)
.addField("lineup_image", String.class)
.addField("festival_date", String.class)
.addField("festival_end_date", String.class)
.addField("official_url", String.class)
.addField("address", String.class)
.addField("latitude", Double.class, FieldAttribute.REQUIRED)
.addField("longitude", Double.class, FieldAttribute.REQUIRED)
.addField("created_date", String.class)
.addField("modified_date", String.class)
.addField("is_deleted", String.class)
.addField("timestamp", Long.class, FieldAttribute.REQUIRED);
// Create a new class - ArtistFestivalModel
RealmObjectSchema festivalLineupSchema = realmSchema.create("FestivalLineup")
.addField("id", String.class, FieldAttribute.PRIMARY_KEY)
.addField("name", String.class)
.addField("profile_image", String.class)
.addField("official_url", String.class)
.addField("created_date", String.class)
.addField("modified_date", String.class)
.addField("is_deleted", String.class)
.addField("lineup", String.class)
.addField("FestivalId", String.class)
.addField("is_liked", Boolean.class, FieldAttribute.REQUIRED);
/** 1st uploaded version with 0
* 2nd uploaded version with 1
* 3rd uploaded version with 19
*/
oldVersion = 19;
}
if(oldVersion == 20) {
//add new fields - match_image,lineup_image,festival_end_date,isMatchedFestival
RealmObjectSchema festivalscema = realmSchema.get("FestivalModel");
List<String> list = new ArrayList<>(festivalscema.getFieldNames());
Log.e("Fields", list.toString());
festivalscema
.addField("isMatchedFestival", Integer.class, FieldAttribute.REQUIRED)
.addField("match_image", String.class)
.addField("lineup_image", String.class)
.addField("festival_end_date", String.class)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
//obj.set("isMatchedFestival", "1");
DynamicRealmObject festivalModel = realm.createObject("FestivalModel");
festivalModel.setInt("name", 1);
}
});
// Create a new class - ArtistFestivalModel
RealmObjectSchema artistFestivalModelSchema = realmSchema.create("ArtistFestivalModel")
.addField("id", String.class, FieldAttribute.PRIMARY_KEY)
.addField("name", String.class)
.addField("description", String.class)
.addField("profile_image", String.class)
.addField("match_image", String.class)
.addField("lineup_image", String.class)
.addField("festival_date", String.class)
.addField("festival_end_date", String.class)
.addField("official_url", String.class)
.addField("address", String.class)
.addField("latitude", Double.class, FieldAttribute.REQUIRED)
.addField("longitude", Double.class, FieldAttribute.REQUIRED)
.addField("created_date", String.class)
.addField("modified_date", String.class)
.addField("is_deleted", String.class)
.addField("timestamp", Long.class, FieldAttribute.REQUIRED);
// Create a new class - ArtistFestivalModel
RealmObjectSchema festivalLineupSchema = realmSchema.create("FestivalLineup")
.addField("id", String.class, FieldAttribute.PRIMARY_KEY)
.addField("name", String.class)
.addField("profile_image", String.class)
.addField("official_url", String.class)
.addField("created_date", String.class)
.addField("modified_date", String.class)
.addField("is_deleted", String.class)
.addField("lineup", String.class)
.addField("FestivalId", String.class)
.addField("is_liked", Boolean.class, FieldAttribute.REQUIRED);
/** 1st uploaded version with 0
* 2nd uploaded version with 1
* 3rd uploaded version with 19
*/
oldVersion++;
}
}
}