public class RetrofitUtils {
private static RetrofitUtils retrofitUtils;//工具类对象
private static ApiFunction apiFunction;//请求网络接口
public static OkHttpClient okHttpClient;
//静态快,获取OkHttpClient对象
static {
getOkHttpClient();
}
//单例锁模式
public static RetrofitUtils getInstence(){
if(retrofitUtils==null){
synchronized (RetrofitUtils.class){
if (retrofitUtils==null){
retrofitUtils=new RetrofitUtils();
}
}
}
return retrofitUtils;
}
//单例模式获取okhttp
public static OkHttpClient getOkHttpClient(){
if(okHttpClient==null){
synchronized (OkHttpClient.class){
if(okHttpClient==null){
File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");
long fileSize = 10 * 1024 * 1024;
okHttpClient=new OkHttpClient.Builder()
.addInterceptor(new MyInter())
//打印拦截器日志
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间
.readTimeout(15, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(15, TimeUnit.SECONDS)//设置写入超时时间
//.cache(new Cache(fileDir,fileSize))//写入sd卡
.build();
}
}
}
return okHttpClient;
}
//私有的无参构造
private RetrofitUtils(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(Constants.Base_url)
.addConverterFactory(GsonConverterFactory.create())//添加gson转换器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava转换器
.client(okHttpClient)//添加okhttp
.build();
apiFunction=retrofit.create(ApiFunction.class);
}
//获取
public ApiFunction API(){
return apiFunction;
}
//拦截器
static class MyInter implements Interceptor {
private int versionCode;
private Context context;
private SharedPreferences jiLu;
private String token;
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder request_builder = request.newBuilder();
context = MyApp.con;
jiLu = context.getSharedPreferences("JiLu", 0);
if(jiLu!=null){
token = jiLu.getString("token", null);
Log.e("token",token+"aaaaaa");
}
try {
PackageManager pm = context.getPackageManager();
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
versionCode = pi.versionCode;
Log.e("RetrofitUtils","versionCode============"+ versionCode);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if("GET".equals(request.method()))
{
HttpUrl.Builder builder = request.url().newBuilder();
HttpUrl build = builder.addQueryParameter("source", "android")
.addQueryParameter("appVersion", versionCode + "")
.addQueryParameter("token", token + "")
.build();
request = request_builder.url(build).build();
}
if ("POST".equals(request.method())) {
System.out.println(request.method() + "开始添加公共参数3333333333"+request.body().toString());
if (request.body() instanceof FormBody) {
System.out.println("FormBody开始添加公共参数");
FormBody.Builder builder = new FormBody.Builder();
FormBody body = (FormBody) request.body();
for (int i = 0; i < body.size(); i++) {
builder.add(body.encodedName(i), body.encodedValue(i));
}
body = builder.add("source", "android")
.add("appVersion", String.valueOf(versionCode))
.add("token", token+"")
.build();
System.out.println("开始添加公共参数55555" );
request = request_builder.post(body).build();
}
else if(request.body() instanceof MultipartBody)
{
MultipartBody body = (MultipartBody) request.body();
MultipartBody.Builder builder=new MultipartBody.Builder().setType(MultipartBody.FORM);
builder.addFormDataPart("source","android")
.addFormDataPart("appVersion",versionCode+"")
.addFormDataPart("token",token+"");
List<MultipartBody.Part> parts = body.parts();
for (MultipartBody.Part part : parts) {
builder.addPart(part);
}
request=request_builder.post(builder.build()).build();
}
}
// System.out.println("开始添加公共参数44444444444" + chain.proceed(request).body().string());
return chain.proceed(request);
}
/**
* 添加公共参数
*
* @param oldRequest
* @return
*/
private Request addParam(Request oldRequest) {
jiLu = context.getSharedPreferences("JiLu", 0);
if(jiLu!=null){
token = jiLu.getString("token", null);
}
PackageInfo packageArchiveInfo = MyApp.con.getPackageManager().getPackageArchiveInfo(MyApp.con.getPackageName(), 0);
int versionCode = packageArchiveInfo.versionCode;
HttpUrl.Builder builder = oldRequest.url()
.newBuilder()
.setEncodedQueryParameter("source", "android")
.setEncodedQueryParameter("token",token)
.setEncodedQueryParameter("appVersion",versionCode+"")
;
Request newRequest = oldRequest.newBuilder()
.method(oldRequest.method(), oldRequest.body())
.url(builder.build())
.build();
return newRequest;
}
}
}
OkHttp简单应用
最新推荐文章于 2023-06-23 20:06:01 发布