经过一段时间的寻找虫子后,事实证明:
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
为什么?这记录在哪里?
Froyo的
答案 0 :(得分:9)
等待onCreate
结束调用此方法。
public class MainActivity extends BaseActivity {
public onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
getApplicationContext(); //activity has a context now
}
}
答案 1 :(得分:8)
只是想知道发生了什么。 活动 extends ContextThemeWrapper扩展 ContextWrapper Activity 继承getApplicationContext()
。 ContextWrapper implements it as:
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext(); // mBase is a Context
}
ContextWrapper
的{{3}}是:
public ContextWrapper(Context base) {
mBase = base;
}
ContextThemeWrapper
only public constructor中的:
public ContextThemeWrapper() {
super(null);
}
由于 Activity 没有定义显式构造函数,因此上面的构造函数在Activity的构造函数中被调用 - mBase == null
- 繁荣。
来自4.2.2_r1