Chandu
Chandu

Reputation: 57

Previous realm data is lost when Realm migration is done in android

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

Answers (1)

Christian Melchior
Christian Melchior

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

Related Questions