8

バグハンティングにしばらく時間を費やした後、次のことが判明しました。

public class MainActivity extends BaseActivity { // BaseActivity extends Activity

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

なんで ?これはどこに文書化されていますか?
フロヨ

4

2 に答える 2

11

何が起こっているのかを感じるだけです。Activity は、Activityが継承するContextWrapperを拡張するContextThemeWrapperを拡張します。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は明示的なコンストラクターを定義していないため、上記のコンストラクターは (Activity のコンストラクターで) ブームと呼ばれますmBase == null

からのリンク4.2.2_r1

于 2013-05-06T02:17:18.920 に答える
9

onCreateがこのメソッドを呼び出すのを待ちます。

public class MainActivity extends BaseActivity { 

    public onCreate(Bundle savedInstanceState) {
        super(savedInstanceState);
        getApplicationContext(); //activity has a context now
    }
}
于 2013-04-14T22:11:24.443 に答える