android - 为什么 Activity 的构造函数中的 getApplicationContext() 会抛出空指针异常?

标签 android constructor nullpointerexception android-context

经过一段时间的 bug 搜寻后发现:

public class MainActivity extends BaseActivity { // BaseActivity extends Activity

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

为什么?这在哪里记录?
冰冻

最佳答案

只是想了解一下发生了什么。 Activity extends ContextThemeWrapper它扩展了 ContextWrapperActivity 从中继承了 getApplicationContext()上下文包装器 implements it as :

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

only public constructor ContextWrapper 是:

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

ContextThemeWrapperwe have :

 public  ContextThemeWrapper() {
     super(null);
 }

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

来自4.2.2_r1的链接

关于android - 为什么 Activity 的构造函数中的 getApplicationContext() 会抛出空指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004891/

相关文章:

java - getenv() 的异常处理程序

android - 无法在 Fling 上使用 java.lang.NullPointerException 启动 Activity

Android 应用程序类被调用两次

android - 使用样式和主题为自定义属性创建默认值

c# - 在 C# 中没有带 0 个参数的构造函数

java - 在构造函数方法上调用方法

android - Monodroid - Monodevelop 在部署到设备时删除用户数据

android - 重置 Android 计步器

java - 通过构造函数将ArrayList写入txt文件

java - JDBC 空指针异常