Reputation: 57
Previously I was using 0.82.0 realm version and now I am using 0.87.0 version.According to project requirements i am attempting to add two new tables to existing realm schema.
For that I added below code..
public class UnitDetails extends RealmObject {
private int unitUid;
private double noOfrooms;
private int unitArea;
private int fId;
private int fNum;
private int maxAvailablity;
// and setters and getter methods
}
public class Quote extends RealmObject {
private String qName;
private String qLocation;
// and setters and getter methods
}
and Migration code is as follows,creating a RealmConfiguration instance using appication context, and calling getRealmInstance() method wherever Realm instance is needed.
public class RealmUtils {
private static RealmConfiguration config;
public static void createRealmConfig(Context context) {
config = new RealmConfiguration.Builder(context)
.name("default.realm1")
.schemaVersion(1)
.migration(new CustomMigration())
.build();
}
public static Realm getRealmInstance() {
return Realm.getInstance(config);
}
}
public class CustomMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 0) {
RealmObjectSchema quoteSchema = schema.create("Quote")
.addField("qName", String.class)
.addField("qLocation", String.class);
RealmObjectSchema unitDetailsSchema = schema.create("UnitDetails")
.addField("unitUid", int.class)
.addField("noOfrooms", double.class)
.addField("unitArea", int.class)
.addField("fId", int.class)
.addField("fNum", int.class)
.addField("maxAvailablity", int.class);
oldVersion++;
}
}
}
When I update my app by installing new apk, I am not getting RealmMigrationNeededException but previous data is lost.
what is going wrong here and how to prevent data loss? Do I need to do anything with existing tables? What all I should take care of, as I am using new realm version ?
Upvotes: 2
Views: 1765
Reputation: 20126
You should not update the name as well, just the version number. The following configuration should work:
public class RealmUtils {
private static RealmConfiguration config;
public static void createRealmConfig(Context context) {
config = new RealmConfiguration.Builder(context)
.schemaVersion(1)
.migration(new CustomMigration())
.build();
}
public static Realm getRealmInstance() {
return Realm.getInstance(config);
}
}
Upvotes: 3