【发布时间】:2020-06-24 20:35:44
【问题描述】:
我正在尝试使用 Kotlin 中的 sharedpreferences 加载和保存数据,特别是使用 Android Studio。
我收到此错误消息:
java.lang.NullPointerException:尝试调用虚拟方法 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' 在空对象引用上
指向我对共享首选项的初始化。
class MainActivity : AppCompatActivity(), SensorEventListener {
private val dragonstats by lazy {getSharedPreferences("DRAGON_STATS",Context.MODE_PRIVATE)}
如果我这样写,我会得到同样的错误:
val dragonstats = getSharedPreferences("DRAGON_STATS", Context.MODE_PRIVATE)
我在其他答案中看到过这样声明:
SharedPreferences dragonstats
但这在 Kotlin 中无法读取。
共享首选项上的 android.com 文件说要这样声明:
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
但这会给活动带来未解决的参考错误。
如何初始化 SharedPreferences 文件以便在 Kotlin 中存储和检索数据?
编辑: 所以,唯一让它发挥作用的方法就是把 ?无所不包。
我在 oncreate 之外声明它,所以我可以在整个过程中使用它:
var dragonstats: SharedPreferences? = null
在 oncreate 中我设置了它:
dragonstats = PreferenceManager.getDefaultSharedPreferences(this)
然后,当我想调用它的任何部分时,我使用 ?:
exerciselevel = dragonstats?.getInt("exerciselevel", 0)!!
我不明白为什么这行得通,但没有别的。
【问题讨论】:
标签: android kotlin sharedpreferences