在Realm上迁移0.81.1
添加对象后得到不同的exception。
- 需要迁移
- 计划中没有找到的课程
- 磁盘上的版本比请求的版本新
怎么了?
1 – MainActivity.java
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(context) .build(); Realm.setDefaultConfiguration(realmConfiguration); Realm realm = Realm.getDefaultInstance(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { RealmTestObjectOne testObjectOne = new RealmTestObjectOne(); testObjectOne.setValue(value); realm.copyToRealmOrUpdate(testObjectOne); } });
2 – RealmTestObjectOne.java
public class RealmTestObjectOne extends RealmObject { @PrimaryKey private int key = 1; private String value; public RealmTestObjectOne() { } public int getKey() { return key; } public void setKey(int key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
3 – 构建和运行
4 – 添加RealmTestObjectTwo.java与RealmTestObjectOne.java相同但ID不同
5 – 修改RealmConfiguration
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(context) .schemaVersion(2) .migration(new Migration()) .build();
5 – 添加Migration.java
public class Migration implements RealmMigration { @Override public long execute(Realm realm, long l) { l += 1; return l; } }
解决了
感谢@geisshirt的回答。
public class Migration implements RealmMigration { @Override public long execute(Realm realm, long version) { if (version == 0) { Table table = realm.getTable(RealmTestObjectTwo.class); table.addColumn(ColumnType.INTEGER, "key"); table.addColumn(ColumnType.STRING, "value"); table.setPrimaryKey("key"); version += 1; } return version; } }