Android 如何更改代码以更好地适应使用Realm的多个表?
我需要一些关于Realm.io的帮助,我刚刚在一个我要参加的项目中被介绍给它。这位前开发人员最近展示了我们应用程序的源代码,并告诉我他正在使用Realm.io只是为了检查用户是否第一次打开应用程序。下面是他在onCreate()方法上使用的代码片段。我正在使用Android Studio进行开发Android 如何更改代码以更好地适应使用Realm的多个表?,android,realm,Android,Realm,我需要一些关于Realm.io的帮助,我刚刚在一个我要参加的项目中被介绍给它。这位前开发人员最近展示了我们应用程序的源代码,并告诉我他正在使用Realm.io只是为了检查用户是否第一次打开应用程序。下面是他在onCreate()方法上使用的代码片段。我正在使用Android Studio进行开发 Realm.init(getApplicationContext()); final Realm realm = Realm.getDefaultInstance(); fin
Realm.init(getApplicationContext());
final Realm realm = Realm.getDefaultInstance();
final RealmResults<Configuracao> configuracoes =
realm.where(Configuracao.class)
.equalTo("chave", "primeiroAcesso")
.findAll();
我遇到了RealmMigrationeded异常,我阅读了文档,我知道我需要进行迁移
我的问题是:迁移代码应该放在哪里?我应该把它放在新的类文件中吗?
此外,在文档中,他们告诉我需要通过以下方式更改模式的版本:
public class medicine extends RealmObject {
@PrimaryKey
private int id;
private String med;
private String doctor;
/* Setters and getters here */
}
RealmConfiguration config1 = new RealmConfiguration.Builder()
.name("default1.realm")
.schemaVersion(3)
.migration(new Migration())
.build();
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);
}
}
}
但是他们也说,如果这个版本不存在,就会抛出一个异常,所以我猜我需要在这样做之前更改模式
我是否必须更改数据库本身中的任何内容,然后在应用程序内部调用迁移,或者迁移是更改模式的过程?对不起,这篇文章太长了,但我真的很困惑。提前感谢您的帮助。是的,您需要创建一个自定义迁移类,该类必须实现
RealmMigration
。您在配置中提供的架构版本是运行迁移后您的领域将具有的版本。您可以在此处看到一个示例:
在您的情况下,它看起来像这样:
public class medicine extends RealmObject {
@PrimaryKey
private int id;
private String med;
private String doctor;
/* Setters and getters here */
}
RealmConfiguration config1 = new RealmConfiguration.Builder()
.name("default1.realm")
.schemaVersion(3)
.migration(new Migration())
.build();
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);
}
}
}
哦,谢谢,我想这基本上解决了我的问题,所以我假设这个领域总是从版本0开始的?所以我必须从那里继续吗?是的。领域从版本0开始。