Mr_*_*s_D 8 android constructor nullpointerexception android-context
经过一段时间的寻找虫子后,事实证明:
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
Run Code Online (Sandbox Code Playgroud)
为什么?这记录在哪里?
升级Froyo
等待结束onCreate调用此方法.
public class MainActivity extends BaseActivity {
public onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
getApplicationContext(); //activity has a context now
}
}
Run Code Online (Sandbox Code Playgroud)
只是为了了解发生了什么.Activity 扩展了ContextThemeWrapper,它扩展了Activity继承的ContextWrapper.ContextWrapper将其实现为:getApplicationContext()
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext(); // mBase is a Context
}
Run Code Online (Sandbox Code Playgroud)
在唯一的公共构造函数的ContextWrapper方法是:
public ContextWrapper(Context base) {
mBase = base;
}
Run Code Online (Sandbox Code Playgroud)
在ContextThemeWrapper 我们有:
public ContextThemeWrapper() {
super(null);
}
Run Code Online (Sandbox Code Playgroud)
并且由于Activity没有定义显式构造函数,因此上面的构造函数被调用 - mBase == null在Activity的构造函数中 - 繁荣.
来自的链接 4.2.2_r1
| 归档时间: |
|
| 查看次数: |
12489 次 |
| 最近记录: |