场景:存储数据使用的是SharedPreferences,都知道最简单的获得SharedPreferences的方法是context.getSharedPreferences
,但是我存储数据的环节放在了自定义Interceptor(okhttp3)的interceptor方法里面,这个类是无法从Activity/Fragment里获取context的,当然,可以设置一个context的属性放在构造函数或者使用set方法,在使用该类的时候传入context。
这样做的一个弊端在于,如果项目里面对网络请求方法进行了深度的封装,那么context就要存在于一个链上,尽管它并不需要在其他类里使用。
那么换个思路,Android里还有ApplicationContext可以获取。
但是默认的Application类在普通Java类里也是无法得到的,因此需要自定义一个MainApplication(名称随意)
public class MainApplication extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}
public static Context getCustomApplicationContext() {
return mContext;
}
}
别忘了在AndroidManifest.xml里修改
<application
android:name="MainApplication"
>
这样自定义的Application才能生效,之后需要获取context的话,可以通过MainApplication.getCustomApplicationContext()
方法来获取。