After some time spent bug hunting it turns out that :
public class MainActivity extends BaseActivity { // BaseActivity extends Activity
public MainActivity() {
super();
getApplicationContext(); // NPE here
}
}
Why ? Where is this documented ?
Froyo
Just to get a feeling of what's going on. Activity extends ContextThemeWrapper which extends ContextWrapper from whom Activity inherits getApplicationContext()
. ContextWrapper implements it as :
@Override
public Context getApplicationContext() {
return mBase.getApplicationContext(); // mBase is a Context
}
The only public constructor of ContextWrapper
is :
public ContextWrapper(Context base) {
mBase = base;
}
in ContextThemeWrapper
we have :
public ContextThemeWrapper() {
super(null);
}
and since Activity does not define an explicit constructor the constructor above is called - mBase == null
in Activity's constructor - boom.
Links from 4.2.2_r1
Wait for the end of onCreate
to call this method.
public class MainActivity extends BaseActivity {
public onCreate(Bundle savedInstanceState) {
super(savedInstanceState);
getApplicationContext(); //activity has a context now
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With