retrofit2封装方法1-----比较渣,只是记录,后期优化
package cn.yuebai.yuebaidealer.config;
import android.content.Context;
import android.text.TextUtils;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* User: ZhiyaZhao(zhiyazhao@126.com)
* Date: 2016-04-15
* parma: 09:49
* FIXME
*/
public abstract class BaseApi extends RuntimeException {
private static final OkHttpClient.Builder mHttpClientBuilder = new OkHttpClient.Builder();
private static Retrofit mRetrofit;
protected static Retrofit getRetrofit(Context context) {
if (mRetrofit == null) {
//设定30秒超时,拦截http请求进行监控重写或重试,打印网络请求
mHttpClientBuilder.connectTimeout(AppConfig.CONNECT_TIME_OUT, TimeUnit.SECONDS)
// .interceptors().add(
// new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request originalRequest = chain.request();
//
// String cacheHeaderValue = isOnline(context) ?
// "public, max-age=2419200" : "public, only-if-cached, max-stale=2419200" ;
//
// Request request = originalRequest.newBuilder().build();
// Response response = chain.proceed(request);
// return response.newBuilder().removeHeader("Pragma").removeHeader("Cache-Control")
// .header("Cache-Control", cacheHeaderValue).build();
// }
// }
// ).
// .addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request request = chain.request();
// HttpUrl url = request.url().newBuilder().addQueryParameter(MovieDbApi.PARAM_API_KEY, BuildConfig.MOVIE_DB_API_KEY).build();
// request = request.newBuilder().url(url).build();
//
// return chain.proceed(request);
// }
// })
// .networkInterceptors().add(new PersistentCookieStore(context))
//
.addInterceptor(interceptor)
// .addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request request = chain.request()
// .newBuilder()
// .addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
// .addHeader("Accept-Encoding", "gzip, deflate")
// .addHeader("Connection", "keep-alive")
// .addHeader("Accept", "*/*")
// .addHeader("Cookie", "add cookies here")
// .build();
// return chain.proceed(request);
// }
// })
// .interceptors().add(new CookiesInterceptor(context).REWRITE_CACHE_CONTROL_INTERCEPTOR)
.cache(new Cache( new File(context.getCacheDir()
.getAbsolutePath(), AppConfig.OKHTTP_CACHE_DIR), AppConfig.MAX_CACHE_SIZE_INBYTES))
.interceptors().add(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY));
OkHttpClient mOkHttpClient = mHttpClientBuilder.build();
//构建Retrofit
mRetrofit = new Retrofit.Builder()
//配置服务器路径
.baseUrl(AppConfig.BASE_URL)
//配置转化库,默认是Gson
.addConverterFactory(GsonConverterFactory.create())
//配置回调库,采用RxJava
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//设置OKHttpClient为网络客户端
.client(mOkHttpClient)
.build();
}
return mRetrofit;
}
static Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
String cacheControl = request.cacheControl().toString();
if (TextUtils.isEmpty(cacheControl)) {
cacheControl = "public, max-age=60";
}
return response.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
}
};
}