如何使用Realm更改我的代码以更好地适应多个表?

时间:2017-03-10 00:40:10

标签: android realm

我需要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();

但他们也说如果该版本不存在则会抛出异常,因此我猜测我需要在执行此操作之前更改架构?

我是否必须更改数据库本身的任何内容,然后在应用程序内部调用迁移,否则迁移是更改架构的过程?对于长文本感到抱歉,但我真的很困惑。感谢您的帮助。

1 个答案:

答案 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);

        }
    }
}