8

在花了一些时间寻找错误之后,事实证明:

public class MainActivity extends BaseActivity { // BaseActivity extends Activity

    public MainActivity() {
        super();
        getApplicationContext(); // NPE here
    }
}

为什么 ?这是在哪里记录的?
弗罗约

4

2 回答 2

11

只是为了感受一下发生了什么。Activity 扩展了 ContextThemeWrapper,后者扩展了Activity继承的ContextWrapperContextWrapper将其实现为getApplicationContext()

@Override
public Context  getApplicationContext() {
    return mBase.getApplicationContext(); // mBase is a Context
}

唯一公共构造函数ContextWrapper

 public  ContextWrapper(Context base) {
     mBase = base;
 } 

ContextThemeWrapper 我们有

 public  ContextThemeWrapper() {
     super(null);
 }

并且由于Activity没有定义显式构造函数,因此调用了上面的构造函数 -mBase == null在 Activity 的构造函数中 - 繁荣。

来自的链接4.2.2_r1

于 2013-05-06T02:17:18.920 回答
9

等待结束onCreate调用此方法。

public class MainActivity extends BaseActivity { 

    public onCreate(Bundle savedInstanceState) {
        super(savedInstanceState);
        getApplicationContext(); //activity has a context now
    }
}
于 2013-04-14T22:11:24.443 回答