Get application context returns null
Solution 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
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
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
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.
learner
Updated on January 13, 2020Comments
-
learner over 4 years
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 removingstatic
fromgetContext()
so that I would doMyApp.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; } }
-
learner over 10 yearsThe link solved my problem. I was missing
<application android:name="com.xyz.MyApplication">
. Thanks. -
learner over 10 yearsThanks for helping. +1. I was missing
<application android:name="com.xyz.MyApplication">
-
Nagaraju Gajula over 7 years
return instance.getApplicationContext()
works fine, no need to usereturn mContext
. Particularly when callinginstance.getApplicationContext()
from classes outside application in some cases like database, it is preferred to pass instance as context, and then call Application context. -
Hamid Zandi almost 7 yearsi have this warning "Do not place Android context classes in static fields; this is a memory leak ", how can i resolve this?
-
baldraider over 6 years@juzamn in services sometime Myapp.getContext through null pointer exception
-
Shubham AgaRwal about 5 years@do01 it's a application object. I don't think any leak willl affect application memory management.