面试中几次被问到是否了解RxJava、Retrofit、OkHttp,以及封装使用,看来不会用这三剑客工作不好找啊,总结一下最近学习的关于RxJava + Retrofit2 + OkHttp的知识点。
首先总结一下他们是干什么的。
RxJava其实就是处理异步请求的,Retrofit2是基于okhttp的可以方便通过注解来请求网络的框架,自带okhttp对象,也可以传入自己创建的okhttp对象,可以在自己创建的okhttp对象很多网络请求配置,比如设置超时、拦截器、持久化、缓存、公共参数、Gson解析...
所以RxJava + Retrofit2 + OkHttp结合使用中,RxJava负责异步处理,Retrofit2负责网络请求,OkHttp负责网络请求处理。
流程
- 首先创建Retrofit实例对象
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
- 创建请求接口,返回值为被观察者对象
@GET("top250")
Observable<MovieSubject> getTop250(@Query("start") int start, @Query("count")int count);
- 通过请求返回的被观察者对象订阅观察者对象,处理异步请求结果
mMovieData.getMovieData(0, 20)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<MovieSubject>() {
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
@Override
public void onNext(MovieSubject movieSubject) {
LogUtils.d("movieSubject:" + movieSubject);
mMovieAdapter.setMovies(movieSubject.subjects);
mMovieAdapter.notifyDataSetChanged();
}
});