【问题标题】:Changing Android Shared Preference Value from String to Int将 Android 共享首选项值从 String 更改为 Int
【发布时间】:2015-09-29 12:45:06
【问题描述】:

我正在更新我的 Android 应用。该应用程序从我的服务器检索数据,其中数据是用户 ID。用户 ID 是一个数字(整数),但它作为字符串从服务器到达,例如“1234”。在旧版本中,我将此用户 ID 作为字符串保存在我的共享首选项中,但现在我回过头来看它,我不喜欢这个并希望将其保存为应有的整数。

到目前为止非常简单。我只是使用 putInt / getInt 而不是 putString / getString。问题是所有当前使用该应用程序的人都会将值作为字符串保存在他们的共享首选项中,然后当他们更新应用程序时,新版本的应用程序将开始尝试使用 getInt 来获取旧版本的值版本保存为字符串。

什么是避免因此出现任何错误并确保两个应用版本之间平滑过渡的最佳方法?

谢谢。

【问题讨论】:

  • 即兴发挥,我会在自定义 Application onCreate() 中添加一段代码,以尝试读取 int。如果失败,请尝试读取字符串。如果成功,则将其转换为相应的 int 并保存。这样,当您的“常规”应用程序代码获得控制权时,就应该进行转换。话虽如此,我个人会将其保留为字符串,以防您将来决定在用户​​ ID 上使用字母数字。
  • 无论如何,我不会更改Preferences 项目的类型。如果您想更改为int,请创建一个新条目并检查它们。我通常在 SharedPreferences 周围创建一个包装器,因此这种类型的更改不会影响我的代码。
  • 是的,我将使用@CommonsWare。服务器提供的用户 ID 在我的 mySQL 数据库中是一个 Int,因此它不会很快变成字母数字。我接受了 Prexx 下面的回答,因为它提供了一个示例,以后可能对其他人有用。谢谢大家。

标签: android sharedpreferences


【解决方案1】:

在你的 onCreate 中有类似的东西:

try{
   prefs.getInt("key", 0);
}catch (ClassCastException e){
   Integer uid = Integer.parseInt(prefs.getString("key", null);
   if(uid != null)
      prefs.edit().putInt("key", uid).commit();
}

【讨论】:

  • 感谢您的示例。这就是我要做的。
【解决方案2】:

这很简单

int userid = Integer.parseInt( preferences.getString("userid", ""));

【讨论】:

    【解决方案3】:

    首先将你的字符串用户ID转换成整数,

    int uid=Integer.parseInt("1234");//here is your string user id in place of 1234.
    

    然后使用 putExtra(key,intValue) 将 uid 写入您的共享首选项。

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2011-06-17
      • 2012-11-14
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多