gpt4 book ai didi

android - 在 sharedPref.getString 中设置默认值有什么意义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:39 25 4
gpt4 key购买 nike

我正在访问我的 Android 应用 SharedPreferences 通过

private val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)`

然后尝试使用

从中获取数据
val lat: String = sharedPref.getString("MyKey", "Default")

但是这一行给我一个错误读取 "Type mismatch. Required String, found String?"

根据文档,getString 方法中的第二个参数表示“如果此首选项不存在,则返回值。此值可能为空。

那么如果默认值可以为空,那有什么意义呢?我似乎无法获得永远使用的默认值,唯一能让我的代码工作的方法是使用 elvis 运算符并将我的代码重写为:

val lat: String = sharedPref.getString("MyKey", "Default") ?: "Default"

看起来很丑。我疯了吗?我错过了什么?

最佳答案

这样想:SharedPreferences 中的每个 String 首选项都可以存在,并且可以是null或<强>不 。所以代码

val lat: String = sharedPref.getString("MyKey", "Default") ?: "Not Set"

将返回:

  • Default 如果此 Key 的首选项不存在(意味着此 Key 没有映射)
  • Not Set 如果首选项存在,但为 null(已创建将 Key 映射到 null)
  • 任何其他,如果偏好存在并且映射的值不是null

更新

显然,SharedPreferences 没有我想象的那么聪明。内部有这段代码:

String v = (String)mMap.get(key);
return v != null ? v : defValue;

如果我们将 null 作为默认值(并且没有保存任何值),它将返回 null 只有。这意味着我们实际上不需要 elvis 选项,并且我们不会得到 "Not Set" 值。此方法返回可空值,只是因为它允许您将可空值作为默认值传递。

关于android - 在 sharedPref.getString 中设置默认值有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com