写这篇博客的目的
网上关于Retrofit2和RxJava2的博客特别多,但是内容特别复杂,一上来就讲解很高级的用法
其实我们没必要像高考做题家一样,把每个API都背的滚瓜烂熟
熟悉基本用法,高阶用法需要的时候再逐个了解就行了
因为博客本身是脱离具体应用环境的,很难通过文字把每个点讲得透彻,大可不必太过追求面面俱到
所以这篇博客的主要目的,只是为了讲解一下核心用法,对于不求甚解的新手来说,看完基本已经够用了
Retrofit示例
java
OkHttpClient client = null;
Retrofit.Builder builder = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.baseUrl(baseUrl);
Retrofit retrofit = builder.build();
ApiService service = retrofit.create(ApiService.class);
Retrofit讲解
addCallAdapterFactory 指定Call适配器,用于将Call转换为Flowable
addConverterFactory 只懂Body适配器,用于将Body转换为Bean
client 指定OkHttpClient
baseUrl 指定后台接口根路径
ApiService 指定请求格式和内容
RxJava示例
java
Observable<BookListVo> bookListVoObservable = apiService.getBookList();
Observable<BannerListVo> bannerListVoFlowable = apiService.getBannerData();
Observable concatFlowable = Observable.concat(bookListVoObservable, bannerListVoFlowable);
concatFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
concatFlowable.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable disposable) {
//开始执行网络请求
}
@Override
public void onNext(Object concatVo) {
//网络请求执行成功
}
@Override
public void onError(Throwable throwable) {
//网络请求执行失败
}
@Override
public void onComplete() {
//所有请求全部执行完毕
}
});
RxJava讲解
Observable 封装一个事件,这里是网络请求
Observable.concat 将多个事件串联起来执行
subscribeOn 指定订阅事件的线程,这里是执行网络请求的线程
observeOn 指定接收事件的线程,这里是网络请求执行成功,处理回复数据的线程
subscribe 指定事件订阅者和接收者
onSubscribe 事件被订阅,这里是即将开始执行网络请求
onNext 接收到新事件,这里是网络请求返回数据
onError 接收或处理事件时发生异常,这里是处理网络回复数据异常
onComplete 所有事件全部发送完毕,这个方法要手动调用才会触发
onSubscribe的线程由subscribeOn方法指定
onNext的线程由observeOn方法指定