A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 阳丹老师 于 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对象是在哪里赋值的。

        从上图可以看出Context对象是通过attachBaseContext()方法赋值的。而在Activity的attach方法中调用此方法,并给Context对象赋值。attach方法是Activity被创建的时候调用的方法,它执行在OnCreate()方法之前。因此如果要调用getSharedPreference()方法,可以在onCreate()、onStart()等方法中




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马