【问题标题】:Multiple values in SharedPreferencesSharedPreferences 中的多个值
【发布时间】:2014-08-09 10:39:46
【问题描述】:

我正在尝试将两个值保存在一个键下以用于 Android 中的共享首选项。我想这样做的原因是我可以检查字符串的值,然后替换它。 例如,我希望共享首选项具有 (key1,StringA,StringB)。在我的程序中,我想检查 textView 是否与 StringA 匹配,如果匹配,则将其替换为 StringB。有没有办法通过共享偏好来做到这一点?如果是这样,我将如何实现在一个键下存储两个刺?如果没有,有什么更好的方法可以做到这一点?谢谢你的帮助。

到目前为止,我检查了 textView 的值,并将其替换为这样的共享首选项...

if (sharedpreferences.contains(Name)) {
        if (sharedpreferences.getString(Name, "").equals(stringname.getText())) {
            name.setText(sharedpreferences.getString(Name, ""));
            //I want to replace name(which is the textView) with StringB instead.
        }
        else {
            name.setText("Didn't Match");
        }
    }

这就是为什么我想使用两个值,这样用户可以将他们想要的特定 TextView 替换为另一个字符串。

【问题讨论】:

  • 将两个值添加为逗号分隔的键。然后使用字符串操作来获取值并执行您的逻辑。
  • 所以只需在第一个值之后用逗号添加另一个值?什么样的字符串操作?我会将它们放入一个数组中还是..?
  • 如果您使用逗号分隔的字符串,请注意是否有任何原始字符串包含逗号。你必须逃脱/取消他们。

标签: java android sharedpreferences string-matching


【解决方案1】:

您不能这样做,因为如果您在任何地方使用相同的键,它会覆盖值。

但是,有一种替代方法,您可以使用它在单个首选项键中存储多个字符串值,每个值用逗号分隔。然后你可以使用convertStringToArray 将其转换为字符串数组。

我不建议您这样做,因为您为什么要编写更多代码仅用于存储和操作单个键的值,而不是直接存储不同键的值并直接与单独的值进行比较。

【讨论】:

  • 请参阅上述约瑟夫斯的回答中的解释,了解我为什么需要这样做。我认为 convertStringToArray 可能有效,但我将如何使用上面的代码实现它?
  • @user3124083 好的,知道了。尝试使用我上面提到的替代方案来实现。
【解决方案2】:

我不明白这一点,因为你提到你这样做只是因为

我想这样做的原因是我可以检查 a 的值 字符串,然后替换它。

你对自己施加了不必要的限制。为什么不将字符串存储在不同的键下?

【讨论】:

  • 我使用它是为了能够为特定字符串添加昵称。假设服务将名称(A)更新到文本视图,并且用户有该人的昵称(B),而不是原始名称(A)被发布到文本视图,昵称(B)被发布。 @约瑟夫斯
  • 在这种情况下,我建议您在密钥命名中添加一些逻辑。例如,您可以将前缀“昵称-”附加到普通键。
  • 另一种方法是使用不同的共享首选项来存储昵称。这样你就可以使用相同的键(所以对字符串模式没有限制)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多