我需要Realm.io的一些帮助,我刚刚参加了一个我加入的项目。这位前开发人员最近展示了我们应用程序的源代码,并告诉我他正在使用Realm.io检查它是否是用户第一次打开该应用程序。以下是他在onCreate()方法中使用的代码片段。我正在使用Android Studio进行开发。
Realm.init(getApplicationContext());
final Realm realm = Realm.getDefaultInstance();
final RealmResults<Configuracao> configuracoes =
realm.where(Configuracao.class)
.equalTo("chave", "primeiroAcesso")
.findAll();
问题是现在我需要在数据库中插入新数据,所以我创建了一个如下所示的类:
public class medicine extends RealmObject {
@PrimaryKey
private int id;
private String med;
private String doctor;
/* Setters and getters here */
}
我遇到了RealmMigrationNeeded异常,我阅读了文档,并且我知道我需要进行迁移。
我的问题是:我究竟在哪里放置迁移代码?我应该把它放在新的类文件中吗?
此外,在文档中,他们告诉我,我需要通过以下方式更改架构的版本:
RealmConfiguration config1 = new RealmConfiguration.Builder()
.name("default1.realm")
.schemaVersion(3)
.migration(new Migration())
.build();
但他们也说如果该版本不存在则会抛出异常,因此我猜测我需要在执行此操作之前更改架构?
我是否必须更改数据库本身的任何内容,然后在应用程序内部调用迁移,否则迁移是更改架构的过程?对于长文本感到抱歉,但我真的很困惑。感谢您的帮助。
答案 0 :(得分:1)
是的,您需要创建一个必须实现RealmMigration
的自定义迁移类。您在配置中提供的架构版本是您的Realm在迁移运行后将具有的版本。您可以在此处查看示例:https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java
在你的情况下,它看起来像这样:
public class MyMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 2) {
schema.create("medicine")
.addField("id", int.class, FieldAttribute.PRIMARY_KEY)
.addField("med", String.class)
.addField("doctor", String.class);
}
}
}