我有一个依赖于SQLite的应用程序,数据由资产文件夹中随应用程序附带的xmls填充。
现在我意识到,当我必须在Google Play上推送更新并在XML中添加更多内容时。即使我将数据库版本从1更改为2.导入脚本将不会运行,因为共享首选项config_run值将设置为true。
有关如何处理这种情况的任何指示?
方案
我的应用流程
第二种情况
正如以下几个人所建议的那样,如果我尝试在SQLiteHelper的onUpgrade中将数据变成数据库,那么它只会在MAinActivity中发生,因为我不会在SplashActivity中打开Db连接,并且也不会显示Dialog Progress。 / p>
答案 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)
你可以做两件事:
正确的方法:覆盖数据库提供程序的onUpdate()以导入文件。 (如上所述)
换行器:不检查key =“config_run”,而是检查并设置key =(“config_run”+ DB_VERSION)以查看是否需要导入,当然,如果密钥是不存在,你应该返回false。 这样,每次更新DB编号时,导入作业都将再次运行。
这与您的应用版本无关。