Android中的领域迁移问题

时间:2018-07-20 10:33:03

标签: android realm realm-mobile-platform realm-migration

我有一个数据库,其中包含一些新添加的列。根据我的理解,当某人首次创建该应用程序时,默认架构版本设置为0。稍后需要增加。

我要做的是,我将SCHEMA_VERSION设置为1,因为架构中有新变化,并且期望任何设备上新安装的应用程序都将默认架构包含为1。

我正在用两种不同的设备进行测试,一种正在运行Android 6.0(Marshmellow),另一种正在运行Android 8.0(Oreo)。

问题是,在6.0中运行该应用程序时,我第一次将默认模式设置为-1。稍后,当我显式设置Schema Version 1时,它将默认设置为1,这与预期的一样,而不是因为安装在  装置。

RealmConfiguration.Builder builder = new RealmConfiguration.Builder();
    builder.schemaVersion(SCHEMA_VERSION); // SCHEMA_VERSION = 1
    builder.migration(new Migration());

Realm.setDefaultConfiguration(builder.build());
Realm.getDefaultInstance().close();

但是当我在8.0中尝试相同的代码时,我将默认模式设置为0,并且在设置

builder.schemaVersion(SCHEMA_VERSION); // SCHEMA_VERSION = 1 

,正在调用Migration(),并且由于考虑到 SCHEMA_VERSION = 1 是更新,所以已经存在抛出字段。

这意味着在8.0中,即使我们是首次安装该应用,也要注意 SCHEMA_VERSION = 0 是添加了所有列的默认值(因为我可以看到数据库已经添加了列)。

  

可能是什么问题?为什么有两种不同的默认架构   在两个设备上的最新App上的版本(-1和0)?而且无论如何   首次安装在设备上,为什么会迁移   被叫?

这是我在设置 SCHEMA_VERSION 之前使用的代码段。 获取默认架构版本。.

DynamicRealm dynamicRealm = DynamicRealm.getInstance(Realm.getDefaultConfiguration());
long version = dynamicRealm.getVersion();
dynamicRealm.close();

我还搜索了SO问答,阅读了文章,但找不到与我的问题相符的内容。请跟踪问题here。如果有人可以解释出了什么问题以及如何解决,将不胜感激。 :)

1 个答案:

答案 0 :(得分:0)

我发现设备Samsung Note 8在重启设备后开始工作。在此之前,我尝试卸载并重新安装该应用程序,并且我很确定已删除所有可能的方法。哪个没有用,开始打电话给Migration。现在,这种情况不再发生,并且可以正常运行。 :)