【发布时间】:2021-08-05 05:36:36
【问题描述】:
我正在尝试在我的主要活动中设置一个侦听器以更改“force_dark”设置
val preferences = getDefaultSharedPreferences(this)
var listener: SharedPreferences.OnSharedPreferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
if (key == "force_dark") {
Toast.makeText(this,"config changed",Toast.LENGTH_SHORT).show()
}
}
override fun onResume() {
super.onResume()
preferences.registerOnSharedPreferenceChangeListener(listener)
}
override fun onPause() {
super.onPause()
preferences.unregisterOnSharedPreferenceChangeListener(listener)
}
我的测试代码在上面,但尽管它可以编译,但它在“val preferences = getDefaultSharedPreferences(this)”上崩溃,并出现错误“java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content. Context.getPackageName()' 在空对象引用上"
我不明白为什么会这样,这是系统共享的偏好,所以它怎么可能是 null ?谁能澄清我哪里出错了?
感谢您的帮助,我设法让它工作,但只是想检查它是否以“正确”的方式工作,我补充说
lateinit var preferences : SharedPreferences
lateinit var listener : SharedPreferences.OnSharedPreferenceChangeListener
一开始,然后
preferences = getDefaultSharedPreferences(this)
listener =
SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
if (key == "force_dark") {
Toast.makeText(this,"config changed",Toast.LENGTH_SHORT).show()
}
}
按照建议在 onCreate 中,然后
override fun onResume() {
super.onResume()
preferences.registerOnSharedPreferenceChangeListener(listener)
}
override fun onPause() {
super.onPause()
preferences.unregisterOnSharedPreferenceChangeListener(listener)
}
就他们自己而言,是否有更优雅的解决方案或者这是最好的方法?
【问题讨论】:
标签: android kotlin sharedpreferences