Android在Play商店推送更新

时间:2013-01-16 15:13:34

标签: android sharedpreferences android-sqlite sqliteopenhelper

我有一个依赖于SQLite的应用程序,数据由资产文件夹中随应用程序附带的xmls填充。

  1. 第一次设置共享首选项时运行应用程序config_run = false。
  2. 然后我检查config_run = false然后解析xml并将数据转储到db
  3. set config_run = true
  4. 现在我意识到,当我必须在Google Play上推送更新并在XML中添加更多内容时。即使我将数据库版本从1更改为2.导入脚本将不会运行,因为共享首选项config_run值将设置为true。

    有关如何处理这种情况的任何指示?

    方案

    1. 首次安装 - Ver = 1,DB V = 1(数据被解析并转储到数据库中)
    2. 错误修复,推送和更新但没有数据发生变化 - ver = 1.1,DB V = 1(它应该只替换代码而不是升级或重新创建数据库)
    3. 升级了DATA并推送了一个新的更新 - 版本1.2,DB = 2(没有新代码,但必须重新创建数据)
    4. 我的应用流程

      1. 应用程序启动启动活动。如果Shared Pref - config_run等于false,则它会启动Progress Dialog并将数据解析并转储到数据库中。
      2. 在解析和创建数据库并转储数据时,它将转到MainActivity。
      3. 第二种情况

        1. SplashActivity Runs和config_run = true因此直接转到MAin Activity。
        2. 正如以下几个人所建议的那样,如果我尝试在SQLiteHelper的onUpgrade中将数据变成数据库,那么它只会在MAinActivity中发生,因为我不会在SplashActivity中打开Db连接,并且也不会显示Dialog Progress。 / p>

5 个答案:

答案 0 :(得分:8)

添加您上次运行脚本的版本号的共享首选项。 在应用程序启动时,检查当前的apk版本,如果更新,请再次运行脚本并更新pref

答案 1 :(得分:7)

为什么不想使用内置的sqlite版本控制系统。数据库版本与应用版本无关。它完全符合你的要求。 SQLiteOpenHelper?每次更改你的数据库版本时,都会调用onUpgrate回调,你可以重新填充数据库。有很多例子。

答案 2 :(得分:4)

让xmlfiles以更新日期结束,并将最后更新的日期存储在sharedpref中。

启动时,您可以检查搜索更新(以优化的方式),如果您发现新文件的新日期与上次知道您需要转储文件相比较。

总黑客工作:D

答案 3 :(得分:4)

不要将共享的pref(config_run)设置为false并将其设置为true,而只需将数据库版本设置为它即可。更新应用时,请检查共享首部中是否具有相同的版本号。您可以执行此操作,如下所示:

configRun = settings.getInt("database_version", 0);

if ((DBAdapter.DATABASE_VERSION) == configRun) 
{
//skip xml parsing
}
else
{
//first time configRun will be "0" and DBAdapter.DATABASE_VERSION will be 1
// so you need to parse your xml here and set configRun =1
//on update, change your DB version to 2. now again your configRun and DBAdapter.DATABASE_VERSION will mismatch and you can parse your xml.
}

答案 4 :(得分:3)

你可以做两件事:

  1. 正确的方法:覆盖数据库提供程序的onUpdate()以导入文件。 (如上所述)

  2. 换行器:不检查key =“config_run”,而是检查并设置key =(“config_run”+ DB_VERSION)以查看是否需要导入,当然,如果密钥是不存在,你应该返回false。 这样,每次更新DB编号时,导入作业都将再次运行。

  3. 这与您的应用版本无关。