我创建了一个库,并在我的应用中添加为模块。我的库没有任何activity class
,所有类都是核心java类,所以我无法访问context
。
这就是我所做的;
singleton
static Context myGlobalContext
public void init(Context context){ myGlobalContext=context; }
我从第一个活动中设置了这个上下文;
MyClass.sharedInstance().init(MyApplication.getAppContext());
然后我在所有库类中使用此myGlobalContext
。
当我调试它时,这个东西工作正常,myGlobalContext
的值永远不会为空,但是我遇到崩溃的崩溃,其中context
为空。
java.lang.NullPointerException:尝试调用虚方法 “android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String,int)' 在空对象引用上
当我运行lint
时,它还会警告static global context
这是我的application class
,这里我创建了上下文;
public class MyApplication extends Application {
private static Context context;
public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
答案 0 :(得分:1)
根据您的代码,您应该至少有一个MyApplication实例,或者只是将一些默认数据设置为MyApplication.context,然后您的静态getAppContext将返回一些值
答案 1 :(得分:1)
替换
MyApplication.context = getApplicationContext();
用
MyApplication.context = this;
您需要将应用程序名称添加到清单中,以便设置此上下文
但是,如果您有一个核心Java库,则不应该使用Application,因为您没有生命周期方法可以处理。只需定义使用Context对象的方法,从外部导入库,并在实际处于Activity,Service或其他Context子类中时谨慎使用Application Context