Retrofit的网络封装

  1. import android.os.Environment;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4. import java.util.concurrent.TimeUnit;  
  5. import okhttp3.FormBody;  
  6. import okhttp3.Interceptor;  
  7. import okhttp3.OkHttpClient;  
  8. import okhttp3.Request;  
  9. import okhttp3.RequestBody;  
  10. import okhttp3.Response;  
  11. import okhttp3.logging.HttpLoggingInterceptor;  
  12. import retrofit2.Retrofit;  
  13. import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;  
  14. import retrofit2.converter.gson.GsonConverterFactory;  
  15.   
  16. /** 
  17.  * 网络请求工具类 
  18.  */  
  19.   
  20. public class RetrofitUtil {  
  21.     private static RetrofitUtil retrofitUtil;//工具类对象  
  22.     private static RetrofitService retrofitService;//请求网络接口  
  23.     public static OkHttpClient okHttpClient;  
  24.   
  25.     //静态快,获取OkHttpClient对象  
  26.     static {  
  27.         getOkHttpClient();  
  28.     }  
  29.   
  30.     //单例锁模式  
  31.     public static RetrofitUtil getInstence() {  
  32.         if (retrofitUtil == null) {  
  33.             synchronized (RetrofitUtil.class) {  
  34.                 if (retrofitUtil == null) {  
  35.                     retrofitUtil = new RetrofitUtil();  
  36.                 }  
  37.             }  
  38.         }  
  39.         return retrofitUtil;  
  40.     }  
  41.   
  42.     //单例模式获取okhttp  
  43.     public static OkHttpClient getOkHttpClient() {  
  44.         if (okHttpClient == null) {  
  45.             synchronized (OkHttpClient.class) {  
  46.                 if (okHttpClient == null) {  
  47.                     File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");  
  48.                     long fileSize = 10 * 1024 * 1024;  
  49.                     okHttpClient = new OkHttpClient.Builder()  
  50.                             .addInterceptor(new RetrofitIntercepter())  
  51.                             //打印拦截器日志  
  52.                             .addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))  
  53.                             .connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间  
  54.                             .readTimeout(15, TimeUnit.SECONDS)//设置读取超时时间  
  55.                             .writeTimeout(15, TimeUnit.SECONDS)//设置写入超时时间  
  56.                             //.cache(new Cache(fileDir,fileSize))//写入sd卡  
  57.                             .build();  
  58.                 }  
  59.             }  
  60.         }  
  61.         return okHttpClient;  
  62.     }  
  63.   
  64.     //私有的无参构造  
  65.     private RetrofitUtil() {  
  66.         Retrofit retrofit = new Retrofit.Builder()  
  67.                 .baseUrl(HttpConfig.baseUrl)  
  68.                 .addConverterFactory(GsonConverterFactory.create())//添加gson转换器  
  69.                 .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava转换器  
  70.                 .client(okHttpClient)//添加okhttp  
  71.                 .build();  
  72.         retrofitService = retrofit.create(RetrofitService.class);  
  73.     }  
  74.   
  75.     //拦截器  
  76.     static class RetrofitIntercepter implements Interceptor {  
  77.   
  78.         @Override  
  79.         public Response intercept(Chain chain) throws IOException {  
  80.   
  81.             Request request = chain.request();  
  82.             RequestBody body = request.body();  
  83.             if (body instanceof FormBody) {  
  84.                 FormBody.Builder builder = new FormBody.Builder();  
  85.                 for (int i = 0; i < ((FormBody) body).size(); i++) {  
  86.                     String key = ((FormBody) body).name(i);  
  87.                     String value = ((FormBody) body).value(i);  
  88.                     builder.add(key, value);  
  89.                 }  
  90.                 builder.add("source""android");//appVersion=101  
  91.                 builder.add("appVersion""101");  
  92.                 FormBody formBody = builder.build();  
  93.                 Request request1 = request.newBuilder().post(formBody).build();  
  94.                 Response response = chain.proceed(request1);  
  95.                 return response;  
  96.             }  
  97.   
  98.             return null;  
  99.         }  
  100.     }  
  101.   
  102.     //获取  
  103.     public RetrofitService API() {  
  104.         return retrofitService;  
  105.     }  
  106. }  

猜你喜欢

转载自blog.csdn.net/qq_41212790/article/details/80286446