【发布时间】:2018-07-11 22:30:38
【问题描述】:
我尝试关注this tutorial,但尝试为我的 Sh.Preference (prefs.token = "sometoken") 赋值时出错:
kotlin.UninitializedPropertyAccessException: lateinit property prefs has not been initialized
我不明白错误在哪里,我还检查了this thread。 这是我的代码sn-ps
Prefs.kt:
class Prefs(context: Context) {
private val PREFS_FILENAME = "com.example.myapp.prefs"
private val PREFS_TOKEN = "token"
private val prefs: SharedPreferences = context.getSharedPreferences(PREFS_FILENAME, 0)
var token: String?
get() = prefs.getString(PREFS_TOKEN, "")
set(value) = prefs.edit().putString(PREFS_TOKEN, value).apply()
}
App.kt:
val prefs: Prefs by lazy {
App.prefs
}
class App : Application() {
companion object {
lateinit var prefs: Prefs
}
override fun onCreate() {
prefs = Prefs(applicationContext)
super.onCreate()
}
}
prefs.token有一个默认值"",那为什么日志说没有初始化呢?
【问题讨论】:
-
我不会以静态方式保存共享首选项,因为它引用了上下文。
-
尝试在 onCreate() 中加入 print() 语句,以验证在访问全局 prefs 变量之前它确实被调用。
-
你在哪里做的
prefs.token = "sometoken"? -
您的代码令人困惑。您有两个名为 prefs 的不同属性。一次是 by lazy val,另一个是 lateinit var。此外,问题不是令牌,而是偏好。
-
您是否尝试从伴随对象块中删除 lateinit var prefs: Prefs,将其放在外面......这可能会有所帮助
标签: android kotlin sharedpreferences