问题
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;
}
}
回答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>
回答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">
回答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()
回答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.
回答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.
来源:https://stackoverflow.com/questions/21994612/get-application-context-returns-null