Android Realm 迁移问题: Can an older version of an app get stuck with the data files of a newer version?

标签 android realm realm-migration

当使用包管理器 API 更新 Android 应用程序时,它是否可能会进入这样的状态:该应用程序具有来自较新版本的应用程序的数据文件,但仍安装并运行较旧版本的应用程序电话?

我正在诊断客户返回的手机上的 Android 应用程序,该应用程序是使用 Realm 1.0.0 数据库开发的。由于某种原因,该应用程序似乎无法更新到我们软件的新版本。该应用程序的较新版本具有架构 v4。该应用程序的旧版本具有架构 v3。我们不使用 Play 商店来分发升级。我们有自己的 Web 服务器,应用程序会在其中下载自身的 APK 文件升级,然后通过调用包管理器来安装这些文件,其 Intent 如下:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);

当应用程序启动时,它崩溃并出现以下错误:

Realm on disc is newer then the one specified. V4 vs V3.

如果我查看“设置”>“应用程序”,我可以看到安装的应用程序是使用我们架构的 V3 的旧版本。然而,应用程序从内部存储加载的 .realm 文件具有属于我们应用程序较新版本的 v4 架构。

该应用程序在运行 Lollipop 5.0.2 的 Moto E2 手机上运行。

最佳答案

听起来有些用户很可能降级了您的应用程序?

Realm 不支持自动降级 Realm 文件。如果您希望允许降级,您仍然需要将架构版本提升到下一个级别:4 -> 5,并将那里的迁移指定为 3 -> 4 的倒数。

考虑到您的场景听起来不可能,因为我假设用户可以降级到任何以前的版本?

在这种情况下,您有两个选择:

1) 通过捕获异常来检测降级是否发生,并向用户显示无法降级的警告。

2) 检测到发生降级并删除 Realm 文件。

关于Android Realm 迁移问题: Can an older version of an app get stuck with the data files of a newer version?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745314/

相关文章:

android - 如何设计像在android中修复的进度条这样的 View ?

android - 我是否需要为每个 recyclerview 创建适配器

android - 将 Realm 用于复杂对象android

ios - 在 Realm 迁移期间创建 Realm 对象

安卓:测试syncadapter

安卓视频录制

swift - Realm :导入的数据显示为 String 类型而不是 Int

ios - 不需要更新 Realm 中的对象

realm - 非法参数异常 : Field name doesn't exist on object while doing migration

swift - Realm 迁移 : Migrate an object into a List