Search code examples
javaandroidrealm

The class is missing from the schema for this Realm


Project setting

  • Android studio 2.3.3
  • Realm 3.5.0

Source

RealmController.java

public RealmController(Context context) {
    try {
        this.context = context;
        Realm.init(context);
        PrintLog("RealmController", "RealmController", "Init realm", LOG_LEVEL_INFO);
        realmInstance = Realm.getDefaultInstance();
        PrintLog("RealmController", "RealmController", "Getting realm instance", LOG_LEVEL_INFO);
    }
    catch (Exception err) {
        PrintLog("RealmController", "RealmController", "Error: " + err.getMessage(), LOG_LEVEL_ERROR);
    }
}

SellingData.java

public class SellingDataTable extends RealmObject {

    public Date todaysDate;
    public int sellingData;

    public Date getTodaysDate() {
        return todaysDate;
    }
    public void setTodaysDate(Date todaysDate) {
        this.todaysDate = todaysDate;
    }
    public int getSellingData() {
        return sellingData;
    }
    public void setSellingData(int sellingData) {
        this.sellingData = sellingData;
    }
}

Expected behavior

  • Get realm default instance.

Actual behavior

Gonna crash.

08-09 15:24:16.044 [I2maxMain] {Init} (preparing ui)
08-09 15:24:16.120 [RealmController] {RealmController} (Init realm)
08-09 15:24:16.129 [RealmController] {RealmController} (Error: The 'SellingDataTable' class is missing from the schema for this Realm.)

Solution

  • If you create a Realm with a given schema on the device, then if you start modifying the schema (by adding new classes, adding new fields, removing fields, adding/removing @Index, adding/removing @Required, changing a type, etc.) then you either need to provide a migration (example here), or you need to specify deleteIfMigrationNeeded() on your RealmConfiguration.