在正常的使用Retorfit流程添加 .client(okHttpClient)
然后创建okhttpclient对象。
public static void getNetData( String name, final CallBack callBack){
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
//添加网络过滤器
.addNetworkInterceptor(new NetWorkInterceptor())
//添加缓存地址和大小
.cache(new Cache(MyApp.context.getCacheDir(),1024*1024*10))
.build();
Log.d(TAG, "getNetData: "+name);
final Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiService.baseUrl).build();
final ApiService apiService = retrofit.create(ApiService.class);
apiService.getZhBean(name).enqueue(new Callback<TranslationBean>() {
@Override
public void onResponse(Call<TranslationBean> call, Response<TranslationBean> response) {
final TranslationBean.ContentBean content = response.body().getContent();
}
@Override
public void onFailure(Call<TranslationBean> call, Throwable t) {
Log.d(TAG, "onFailure: "+t.getMessage());
callBack.updateFailed(t.getMessage());
}
});
}
static class NetWorkInterceptor implements Interceptor {
Request request;
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
request = chain.request();
if (! checkNetWork()){
request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build();
}
okhttp3.Response response = chain.proceed(request);
if (! checkNetWork()){
int maxAge=0;
return response.newBuilder().removeHeader("Pragma").header("Cache-Control","public ,max-age="+maxAge).build();
}else{
int maxTime = 60*60 *24;
return response.newBuilder().removeHeader("Pragma").header("Cache-Control","public ,max-age="+maxTime).build();
}
}
}
/**
* 检查是否有网络
* @return
*/
public static boolean checkNetWork(){
ConnectivityManager manager = (ConnectivityManager) MyApp.context.getSystemService(Context.CONNECTIVITY_SERVICE);
return manager.getActiveNetworkInfo() != null;
}