本帖最后由 阳丹老师 于 2016-3-28 18:42 编辑
在Activity的成员中写 private SharedPreferences sp = getSharedPreferences("config",MODE_PRIVATE);报 NullPointException的问题
- 首先要明白一点,成员变量实在加载完构造方法之后,才初始化的。
- Activity继承自 ContextThemeWrapper,而 ContextThemeWrapper继承自ContextWrapper。
getSharedPreferences()方法是ContextWrapper类中的方法。mBase为Context对象
- Activity没有构造方法,它走的是父类的构造方法。而它的父类ContextThemeWrapper构造方法是调用的ContextWrapper的构造方法同时传递了一个null对象进去。
- ContextWrapper构造方法
3、ContextThemeWrapper构造方法
因此在成员变量中调用getSharedPreferences会报空指针异常。
从上图可以看出Context对象是通过attachBaseContext()方法赋值的。而在Activity的attach方法中调用此方法,并给Context对象赋值。attach方法是Activity被创建的时候调用的方法,它执行在OnCreate()方法之前。因此如果要调用getSharedPreference()方法,可以在onCreate()、onStart()等方法中
|