自定义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) } }
原因说明
- Kotlin类的
init块会在构造函数执行阶段立即运行,但Android中Application的Context是系统在attachBaseContext方法中才完成赋值的,init块执行时,当前Application实例的Context还处于null状态,此时调用依赖Context的getSharedPreferences,本质是在null对象上调用方法,必然触发空指针。 - 你看到的文档里的
getSharedPreferences代码是SDK的桩(Stub)实现,这只是接口层面的定义,实际运行时系统会提供正常的实现,正常情况下这个方法确实不会返回空,但你根本没走到调用真实实现的那一步——因为调用方法的上下文已经是null了。
内容的提问来源于stack exchange,提问作者AlanSTACK
相关产品推荐
相关产品推荐

