Retrofit入门使用
首先了解一下为什么要使用Retrofit
Retrofit是对OKHttp的一层封装,本质上网络请求还是OKHttp
OkHttp不同的请求对应的请求地址不同,即request不同,而且配置请求body,请求头,请求参数也很繁琐,每次请求的时候都需要重新一段request代码
OkHttp只是负责网络请求,返回一个Response,不负责数据的解析,所以用户拿到返回数据后,对responsebody需要自己手动解析,无法进行复用 如果用户需要通过上一步的请求结果来进行下一步的请求,会出现回调陷阱
那么如何使用呢?
- 创建NetWorkModule类来对外提供okhttp实例以及retrofit实例
public class NetWorkModule {
/**
* 提供OkHttpClient
*/
public static OkHttpClient provideOkHttpClient() {
//初始化okhttp
OkHttpClient.Builder okhttpClientBuilder = new OkHttpClient.Builder();
//配置缓存
Cache cache = new Cache(AppContext.getInstance().getCacheDir(), Config.NETWORK_CACHE_SIZE);
okhttpClientBuilder.cache(cache);
okhttpClientBuilder.connectTimeout(60, TimeUnit.SECONDS) //连接超时时间
.writeTimeout(60, TimeUnit.SECONDS) //写,也就是将数据发送到服务端超时时间
.readTimeout(60, TimeUnit.SECONDS); //读,将服务端的数据下载到本地
if (Config.DEBUG) {
//调试模式
//创建okhttp日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
//设置日志等级
loggingInterceptor.level(HttpLoggingInterceptor.Level.BASIC);
//添加到网络框架中
okhttpClientBuilder.addInterceptor(loggingInterceptor);
}
return okhttpClientBuilder.build();
}
/**
* 提供Retrofit实例
*
* @param okHttpClient
* @return
*/
public static Retrofit provideRetrofit(OkHttpClient okHttpClient) {
return new Retrofit.Builder()
//让retrofit使用okhttp
.client(okHttpClient)
//api地址
.baseUrl(Config.ENDPOINT)
//适配rxjava
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
//使用gson解析json
//包括请求参数和响应
.addConverterFactory(GsonConverterFactory.create(JSONUtil.createGson()))
//创建retrofit
.build();
}
}