以下架构被吹捧为从我的Android应用程序中的任何位置获取应用程序上下文的方式。但有时候MyApp.getContext()
会返回null。我尝试从static
移除getContext()
来更改架构,以便我MyApp.getInstance().getContext()
。它仍然返回null。我该如何解决? 如何从我的应用中的任何位置获取应用程序的上下文?
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;
}
}
答案 0 :(得分:44)
在onCreate()
中创建getApplicationContext()
(mContext
)的实例,然后从应用中的任何位置调用MyApp.getContext()
,您将静态获取应用上下文。
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();
}
}
请记得申报AndroidManifest.xml
<application android:name="com.mypackage.mypackage.MyApp">
...
...
...
</application>
答案 1 :(得分:9)
在Context
中创建OnCreate
的静态实例并保留,直到您想要从中获取
getter方法getContext()
来自Application
班级:
public class MyApp extends Application {
private static Context sContext;
@Override
public void onCreate() {
sContext = getApplicationContext();
super.onCreate();
}
public static Context getContext() {
return sContext;
}
}
在Manifest
<application android:name="com.package.name.MyApp">
答案 2 :(得分:2)
使用以下方法获取应用程序上下文。
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();
}
}
在清单文件
中添加应用程序名称<application android:name="packagename.MyApp"/>
获取上下文使用
MyApp.getInstance().getApplicationContext()
答案 3 :(得分:1)
instance
永远不会被初始化,因此默认值为null
。这意味着instance.getContext()
会抛出NullPointerException
。要解决此问题,您需要初始化instance
变量。
答案 4 :(得分:0)
目前,您尚未初始化实例,默认情况下,它的值现在将设置为null。您需要在使用它之前为其指定一个值。
答案 5 :(得分:0)
另一个根本原因是由于错误的备份过程。请参阅
Why backup related process might cause Application's onCreate is not executed?