这篇文章主要阐述在实际开发中如何封装我们自己的网络通信框架,网络框架需提供请求日志、失败重试、异步请求等功能,如果你想了解这些,那看这篇文章就对了。如果你对Retrofit的使用还不了解,那你可以看之前一片文章:android 网络框架(一)之Retrofit使用详解。废话不多说,下面我们进入正题。
一、引入SDK
//rxjava
api 'io.reactivex.rxjava2:rxjava:2.0.7'
api 'io.reactivex.rxjava2:rxandroid:2.0.1'
//retrofit
api 'com.squareup.retrofit2:retrofit:2.1.0'
//rxjava转化
api 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
//请求返回转换
api 'com.squareup.retrofit2:converter-scalars:2.0.2'
//okhttp
api 'com.squareup.okhttp3:okhttp:3.5.0'
//日志
api 'com.squareup.okhttp3:logging-interceptor:3.6.0'
其实真正进行网络请求的是OkHttp,Retrofit只是进行接口呈现,而RxJava负责异步请求。
二、BaseRetrofit封装
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class BaseRetrofit<T> implements RetrofitWrapper<T> {
private static final String TAG = "BaseRetrofit";
private String url;
private Retrofit retrofit;
private Class<T> tClass;
private T service;
public BaseRetrofit(Class<T> tClass, String url){
this.tClass = tClass;
this.url = url;
initRetrofit(tClass);
}
@Override
public void initRetrofit(Class<T> tClass) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.readTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.writeTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)
.addInterceptor(new LoggingInterceptor()) //加入日志拦截
.retryOnConnectionFailure(true) //失败重试