在花了一些时间寻找错误之后,事实证明:
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
为什么 ?这是在哪里记录的?
弗罗约
在花了一些时间寻找错误之后,事实证明:
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
为什么 ?这是在哪里记录的?
弗罗约
只是为了感受一下发生了什么。Activity 扩展了 ContextThemeWrapper,后者扩展了Activity继承的ContextWrapper。ContextWrapper将其实现为: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
等待结束onCreate
调用此方法。
public class MainActivity extends BaseActivity {
public onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
getApplicationContext(); //activity has a context now
}
}