前言
现在的软件开发世界里已经出现了很多好用高效的开发框架,作为程序员的我们要随时保持警惕,紧跟潮流,学会使用大牛们所开发出来的东西,目前市场上对应用RxJava+Retrofit+Okhttp(个人认为优点主要在业务处理与逻辑的简化,小伙伴可以细心琢磨哦)已经成为一种主流,不会的小伙伴可以一起探讨学习哦。
这个我推荐大家看看四篇文章
RxJava详解
Retrofit官方文档
Retrofit详解
Okhttp详解
那么接下来如何运用RxJava+Retrofit+Okhttp完成一次网络请求呢,之前我也看了很多文章,但是做为刚入门的我使用起来还是陌生,有些地方还是不太明白,这里不得不感谢一下我的同事,他这两天确实拓宽了我很多的眼界,让我对这个框架大致有了一个认识。
按照传统网络处理方式,我们一般或通过okhttp提交请求,对与请求后的数据处理,我想大多数人都是利用Handler机制,没错,Handler也是很不错的,但是考虑一种情况,当还在网络请求的时候,应用突然结束怎么办,那这样岂不是要造成内存泄漏。而RxJava就可以很好的处理这个问题,那他是怎么做的呢,就是RxJava其实有两种对象在里面,就是大家所说的被观察者和观察者,两者之间是通过订阅产生联系,这个时候只要我们在应用结束的时候取消订阅,那么这个问题就解决了。
好话不多说,那怎么才能利用这种框架完成网络请求以及更加简洁的刷新界面呢?
1.首先我们先做初始化
```
private static final int DEFAULT_TIME_OUT=5;//超时时间
private static final int DEFAULT_READ_OUT=10;//读超时时间
private RetrofitmRetrofit=null;
private static RetrofitServiceManagermRetrofitServiceManager=null;
//构造方法中去初始化Retrifit和Okhttp
private RetrofitServiceManager(){
OkHttpClient.Builder builder=new OkHttpClient.Builder();
HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
builder.addInterceptor(httpLoggingInterceptor);
builder.connectTimeout(DEFAULT_TIME_OUT, java.util.concurrent.TimeUnit.SECONDS);
builder.readTimeout(DEFAULT_READ_OUT, java.util.concurrent.TimeUnit.SECONDS);
//添加公共参数拦截器
// HttpCommonInterceptor httpCommonInterceptor;
//初始化Retrofit对象
mRetrofit=new Retrofit.Builder()
.client(builder.build())//Okhttp对象
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(Constant.Base_url)
.build();
}
//获取实例
public static RetrofitServiceManagergetInstance(){
if(mRetrofitServiceManager==null)
return new RetrofitServiceManager();
return mRetrofitServiceManager;
}
/**用于生成接口实例*/
public T create(Class service){
return mRetrofit.create(service);
}
```
说明
初始化Okhttp和Retrofit,Retrofit支持RxJava2响应式的请求操作。create方法用生成service层的接口实例。