在应用程序更新时,需要从数据库迁移到共享首选项

时间:2014-06-19 10:58:51

标签: android updates

在我当前项目的早期版本中,我们使用数据库进行设置。 但是现在我们认为数据库是简单键值对的开销 所以我们决定使用sharedpref。 现在的问题是如何处理更新功能。 我们没有使用数据库,因此onUpgrade不起作用。

我正在计划做

ArrayList<String> databases = new ArrayList<String>(Arrays.asList(mContext.databaseList()));
if(databases.contains("dbname")){
    copyDataToSharedPref();
    mContext.deleteDatabase("dbname");
}

有没有简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

有没有简单的方法来解决这个问题?

不完全,但并不困难。只需做类似以下的事情......

  1. 当您的主/启动器Activity启动时,请检查SharedPreferences是否有特定的密钥,例如 - 布尔值&#34; update_complete&#34;。
  2. 如果密钥不存在,则有两种可能性。第一个是干净的(新的)安装,第二个是它的更新。
  3. 如果密钥 DOES 存在,那么应用程序已经更新,数据库数据已经转移到SharedPreferences,所以继续运行应用程序。
  4. 如果密钥 DOESN&#39; T 存在,则检查数据库是否存在。如果数据库 DOESN&#39; T 存在,那么这是一个新安装。在这种情况下,只需将SharedPreferences设置为新安装。
  5. 如果密钥 DOESN&#39; T 存在但数据库 DOES 存在,则将数据从数据库传输到SharedPreferences,删除数据库然后放入&#34; update_complete&#34; boolean into SharedPreferences
  6. 我认为这涵盖了它。

答案 1 :(得分:0)

即使在更新应用程序后,数据库条目也会存在(如果用户不清除数据)。所以在你的情况下我会:

  • 检查是否有任何数据库并且它不是空的。
  • 如果有DB,则阅读并创建相应的SharedPreferences
  • 使用context.deleteDatabase(DATABASE_NAME);
  • 删除数据库

我认为Application课程是最佳选择。

我不确定这是否是最好的(或最差的:P方法,但我希望它有用。