在Playstore上为您的Android应用程序提供升级时,是否可以对本地保存的数据运行代码/任务?



所以我想知道使用 http://www.mapdb.org 作为我的应用程序的存储机制(因为我相信它代表了Java数据层的未来,但我跑题了(。

但是,它还不支持架构演变。因此,在此期间,更改持久化类的字段会导致它中断。升级后的应用无法更新数据,因为它已经随新版本的类一起提供。

我需要的是一个钩子,当更新发生时触发,旧版本可以以临时格式(xstream xml(输出数据,以便新版本可以愉快地继续。游戏商店是否支持这样的东西?

像这样的问题SQLite onUpgrade((似乎建议有一个onUpgrade,但是因为那时类的模式已经破坏,我认为为时已晚。如果我提供自己的应用内准备,则无法保证在Playstore升级机制运行之前会运行。

更新:我意识到onUpgrade是一个sqlite的东西,而不是所引用的问题中的android东西。我的错误

同样要强调的是,这个问题指的是一个对象数据库,其中类的序列化版本很重要,并且它还不支持模式演变。

我建议使用SharedPreferences在上次启动时存储应用程序的版本,并将其与当前应用程序版本进行比较。如果存储在共享首选项中的最新版本早于当前版本,则可以执行升级任务。

您可以使用以下命令检查您的应用版本

PackageInfo packageInfo = activity.getPackageManager()
    .getPackageInfo(activity.getPackageName(), 0);
int versionCode = packageInfo.versionCode;

您的代码最终可能如下所示:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int lastVersion = prefs.getInt("lastVersion", -1);
if (lastVersion != -1 && lastVersion  < versionCode) {
    // Perform update logic
    prefs.edit().putInt("lastVersion", versionCode).commit();
}

当然,您也可以检查旧版本以获取特定编号,因此,如果从应用程序版本 15 升级到版本 18 需要一组特定的任务,则可以执行这些任务。

关于SQLite onUpgrade操作和本答案中概述的步骤,不清楚什么?

模式发生了变化,你知道变化是什么,所以你编写 SQL(可能是原始 SQL(来修改表(添加/删除列,并填写新列(等。

不确定你所说的"类已更改"是什么意思,除非你指的是从数据库中反序列化的东西,在这种情况下:a(你仍然可以访问旧类,b(你知道新类是什么样子的,所以如上所述,你编写代码将数据从旧类移动到新类。

我遇到的唯一问题是尝试添加具有"非空"约束的列,因为 sqlite 不允许你这样做(即你会通过更改表来创建具有空值的列,因此违反了约束(。(我删除了约束,但也许更复杂的带有更新的更改表语句也可以工作(

最新更新