public class RetrofitUtil { private static RetrofitUtil RetrofitUtil;//工具类对象 private static ApiService ApiService;//请求网络接口 public static OkHttpClient okHttpClient; //静态快,获取OkHttpClient对象 static { getOkHttpClient(); } //单例锁模式 public static RetrofitUtil getInstence() { if (RetrofitUtil == null) { synchronized (RetrofitUtil.class) { if (RetrofitUtil == null) { RetrofitUtil = new RetrofitUtil(); } } } return RetrofitUtil; } //单例模式获取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 RetrofitUtil() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(Constants.Base_url) .addConverterFactory(GsonConverterFactory.create())//添加gson转换器 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava转换器 .client(okHttpClient)//添加okhttp .build(); ApiService = retrofit.create(ApiService.class); } //获取 public ApiService API() { return ApiService; } //拦截器 static class MyInter implements Interceptor { private int versionCode; private String token; @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request.Builder request_builder = request.newBuilder(); if ("GET".equals(request.method())) { HttpUrl.Builder builder = request.url().newBuilder(); HttpUrl build = builder.addQueryParameter("source", Constants.source) .addQueryParameter("appVersion", "101") .addQueryParameter("token", token + "") .build(); request = request_builder.url(build).build(); } if ("POST".equals(request.method())) { 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", Constants.source) .add("appVersion", "101") .add("token", token + "") .build(); System.out.println("开始添加公共参数55555"); request = request_builder.post(body).build(); } //因为传送文件要用到 @Multipart注解 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", "101") .addFormDataPart("token", token + ""); List<MultipartBody.Part> parts = body.parts(); for (MultipartBody.Part part : parts) { builder.addPart(part); } request = request_builder.post(builder.build()).build(); } } return chain.proceed(request); } /** * 添加公共参数 * * @param oldRequest * @return */ private Request addParam(Request oldRequest) { HttpUrl.Builder builder = oldRequest.url() .newBuilder() .setEncodedQueryParameter("source", "android") .setEncodedQueryParameter("token", token) .setEncodedQueryParameter("appVersion", "101"); Request newRequest = oldRequest.newBuilder() .method(oldRequest.method(), oldRequest.body()) .url(builder.build()) .build(); return newRequest; } } }
RetrofitUtil工具类
最新推荐文章于 2020-11-08 15:21:11 发布