Monday, May 6, 2013

[android help] Why getApplicationContext() in constructor of Activity throws null pointer exception?

android - Why getApplicationContext() in constructor of Activity throws null pointer exception? - Stack Overflow







Tell me more ×

Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

















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


























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
}
}

























Just to get a feeling of what's going on. Activity extends ContextThemeWrapper which extends ContextWrapper from whom Activity inherits getApplicationContext(). ContextWraper 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




















default






.

stackoverflow.comm

No comments:

Post a Comment

Google Voice on T-Mobile? [General]

Google Voice on T-Mobile? So I recently switched from a GNex on Verizon to a Moto X DE on T-Mobile. I had always used Google Voice for my v...