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

private val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)`

然后尝试使用
val lat: String = sharedPref.getString("MyKey", "Default")

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

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

那么拥有默认值又意味着该值可以为null有什么意义呢?我似乎无法获得将要使用的默认值,并且可以使代码正常工作的唯一方法是使用elvis运算符并将代码重写为:
val lat: String = sharedPref.getString("MyKey", "Default") ?: "Default"

看起来很难看。我疯了吗?我想念什么?

最佳答案

可以这样考虑:String中的每个SharedPreferences首选项可以存在而不是,并且可以是null而不是。所以代码

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

将返回:
  • 如果此键的首选项不存在(表示此键没有映射),则为Default
  • Not Set(如果存在首选项),但是是null(创建null的映射键)
  • 如果存在首选项并且映射的值不是value,则为任何其他null
  • 10-07 12:05
    查看更多