Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何更改代码以更好地适应使用Realm的多个表?_Android_Realm - Fatal编程技术网

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

Android 如何更改代码以更好地适应使用Realm的多个表?,android,realm,Android,Realm,我需要一些关于Realm.io的帮助,我刚刚在一个我要参加的项目中被介绍给它。这位前开发人员最近展示了我们应用程序的源代码,并告诉我他正在使用Realm.io只是为了检查用户是否第一次打开应用程序。下面是他在onCreate()方法上使用的代码片段。我正在使用Android Studio进行开发 Realm.init(getApplicationContext()); final Realm realm = Realm.getDefaultInstance(); fin

我需要一些关于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();
我遇到了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开始。