'Get application context returns null
The following schema has been touted as the way to get application context from anywhere within my android app. But sometimes doing MyApp.getContext() returns null. I tried changing the schema by removing static from getContext() so that I would do MyApp.getInstance().getContext(). It still returns null. How do I fix this? How do I get my application's context from anywhere within my app?
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
return instance.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
Solution 1:[1]
Create in onCreate() an instance of getApplicationContext() (mContext) then call MyApp.getContext() from everywhere in your app and you will get your application context statically.
public class MyApp extends Application {
//private static MyApp instance;
private static Context mContext;
public static MyApp getInstance() {
return instance;
}
public static Context getContext() {
// return instance.getApplicationContext();
return mContext;
}
@Override
public void onCreate() {
super.onCreate();
// instance = this;
mContext = getApplicationContext();
}
}
Remember to declare into your AndroidManifest.xml
<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
Solution 2:[2]
Create a static instance of the Context in your OnCreate and keep it till you want to get it from
a getter method getContext()
From the Application class:
public class MyApp extends Application {
private static Context sContext;
@Override
public void onCreate() {
sContext = getApplicationContext();
super.onCreate();
}
public static Context getContext() {
return sContext;
}
}
Declare it in your Manifest:
<application android:name="com.package.name.MyApp">
Solution 3:[3]
Use the following way to get the Application context.
public class MyApp extends Application {
private static MyApp mAppInstance=null;
public static Context appContext;
public static MyApp getInstance() {
return mAppInstance;
}
public static MyApp get() {
return get(appContext);
}
public static MyApp get(Context context) {
return (MyApp) context.getApplicationContext();
}
@Override
public void onCreate() {
super.onCreate();
mAppInstance=this;
appContext=getApplicationContext();
}
}
add the the application name inside the Manifest file
<application android:name="packagename.MyApp"/>
to get the context use
MyApp.getInstance().getApplicationContext()
Solution 4:[4]
instance is never initialized and so has a default value of null. This means that instance.getContext() will throw a NullPointerException. To fix this, you need to initialize the instance variable.
Solution 5:[5]
Currently, you have not initialized instance and by default it's value would now be set to null. You need to assign it a value before you can use it.
Solution 6:[6]
Another root cause, is due to the buggy backup process. Please refer to
Why backup related process might cause Application's onCreate is not executed?
Solution 7:[7]
For get an application context the module should use the application plugin.
build.gradle (:module)
apply plugin: 'com.android.application'
The library plugin has not an app context.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | sharma sk |
| Solution 2 | |
| Solution 3 | Evgeniy Mishustin |
| Solution 4 | Code-Apprentice |
| Solution 5 | ucsunil |
| Solution 6 | Cheok Yan Cheng |
| Solution 7 | Braian Coronel |
