You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Application启动时调用getSharedPreferences出现空指针问题

解决Application初始化块中调用getSharedPreferences导致的空指针异常

问题出在你调用getSharedPreferences的时机不对——不是这个方法返回空,而是调用它的Context本身还没初始化完成。

直接修复方案

把SharedPreferences的初始化代码移到onCreate生命周期方法里,这是Application实例完全初始化后才会执行的方法:

class CustomApplication : Application() {
    private lateinit var sharedPref: SharedPreferences

    override fun onCreate() {
        super.onCreate()
        sharedPref = getSharedPreferences("main", Context.MODE_PRIVATE)
    }
}

原因说明

  1. Kotlin类的init块会在构造函数执行阶段立即运行,但Android中Application的Context是系统在attachBaseContext方法中才完成赋值的,init块执行时,当前Application实例的Context还处于null状态,此时调用依赖Context的getSharedPreferences,本质是在null对象上调用方法,必然触发空指针。
  2. 你看到的文档里的getSharedPreferences代码是SDK的桩(Stub)实现,这只是接口层面的定义,实际运行时系统会提供正常的实现,正常情况下这个方法确实不会返回空,但你根本没走到调用真实实现的那一步——因为调用方法的上下文已经是null了。

内容的提问来源于stack exchange,提问作者AlanSTACK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:10:25