Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中迁移Realm_Android_Database_Migration_Realm_Realm Migration - Fatal编程技术网

如何在Android中迁移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

所以最近我进入了一个关于如何在领域中迁移东西的大问题。我终于解决了这个问题,所以我决定把它发布在stackoverflow上。请注意,Realm很快就会升级他们的系统,所以答案可能很快就会过时


代码用于领域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++;
        }
    }
}