Android 为什么活动构造函数中的getApplicationContext()引发空指针异常?

Android 为什么活动构造函数中的getApplicationContext()引发空指针异常?,android,constructor,nullpointerexception,android-context,Android,Constructor,Nullpointerexception,Android Context,经过一段时间的bug搜索,结果表明: public class MainActivity extends BaseActivity { // BaseActivity extends Activity public MainActivity() { super(); getApplicationContext(); // NPE here } } 为什么??该文件记录在哪里? Froyo等待onCreate的末尾调用此方法 public cla

经过一段时间的bug搜索,结果表明:

public class MainActivity extends BaseActivity { // BaseActivity extends Activity

    public MainActivity() {
        super();
        getApplicationContext(); // NPE here
    }
}
为什么??该文件记录在哪里?

Froyo

等待
onCreate
的末尾调用此方法

public class MainActivity extends BaseActivity { 

    public onCreate(Bundle savedInstanceState) {
        super(savedInstanceState);
        getApplicationContext(); //activity has a context now
    }
}

只是想了解一下发生了什么。扩展活动从其继承的ContextWrapper的活动
getApplicationContext()
。ContextWrapper:

ContextWrapper

 public  ContextWrapper(Context base) {
     mBase = base;
 } 
上下文主题包装中

由于Activity没有定义显式构造函数,上面的构造函数在Activity的构造函数-boom中被称为-
mBase==null


我发现了
4.2.2_r1

中的链接-我的问题不是
getApplicationContext()返回null,但它抛出。我的问题是这个文档在哪里?可能还有关于这个问题的一些理论:)-我相信很多人都认为这个文档是缺乏的-可以在活动的源代码中进行bug报告检查。我猜会调用上下文并生成NPE。链接:你误解了链接。这是活动继承的impl。
返回mBase.getApplicationContext()单击-->
公共抽象上下文getApplicationContext()
:D从未在活动上实现构造函数。@commonware:它在
服务上
实际上:D希望提供一些输入链接-源链接。无论如何,这不应该/这不是在某个地方记录的吗?“它实际上是在一个服务上”——您上面粘贴的代码显示了一个实现构造函数的活动。“无论如何,这不应该/这不是记录在某个地方吗?”——“在活动启动时调用。这是大多数初始化应该去的地方:调用setContentView(int)以膨胀活动的UI,使用findViewById(int)以编程方式与UI中的小部件交互,调用managedQuery()为显示的数据等检索游标。”不,不是问题。任何方法都可以抛出NullPointerException,它不必声明。而且,即使它返回null而不是抛出NullPointerException,您也会在稍后尝试使用该null值时自己抛出该异常。顺便说一句,返回null和抛出NPE在概念上是不同的。@dmon:我知道-不,我认为这种行为是违反直觉的。一个方法不应该抛出一个未检查的异常,除了A)如果它有一个bug或者B)一个使用它的方法是错误的-但是这种错误的方法应该在文档中-就像在java中的大多数api类中一样(如果参数为null,则抛出NPE等等)-我通常检查null,所以我(可能)不会接受null返回值(我知道它不同于NPE!)
 public  ContextWrapper(Context base) {
     mBase = base;
 } 
 public  ContextThemeWrapper() {
     super(null);
 }