Retrofit 和 RxJava 结合使用

既然使用了Retrofit ,那么不去使用一下它的RxJava总觉得心有不甘。Ok,既然有了目标,那么就要去实现它!

Step 1

首先当然去compile需要的类库了。Retrofit要结合Rxjava需要以下的类库:

compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2'
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'

这里需要注意一点,retrofit的版本要和retrofit对应的adapter-rxjava版本一致,否则,会有意想不到的bug出现。本人就遇到了用beta1的adapter和beta2的retrofit,很正常的,它挂了,说我没有实现抽象类的方法。此处略过几百字的幽怨。。。

Step 2

接着我们要创建对应的ApiServices:

@POST("toh")
Observable<ResponseListEvent> loadListInofsWithRx(@Query("v") String v,@Query("key") String key,@Query("month") int month,@Query("day") int day);

创建对应的RESTClient也是需要修改的,需要创建对应的retrofit对象。

private static final Retrofit sRetrofit_rx = new Retrofit.Builder()
            .baseUrl(DEFAULT_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();

调用方法:

public static Observable<ResponseListEvent> queryListEvent(final RequestListEventParams params){
   return sHttpService_rx.loadListInofsWithRx(params.v,params.key,params.month,params.day);
}

使用方法:

RequestListEventParams params = RESTParamsBuilder.buildRequestListEventParams(mCurrentMonth, mCurrentDay);

RESTClient.queryListEvent(params)
          .subscribeOn(Schedulers.io())
          .observeOn(Schedulers.newThread())
          .map(new Func1<ResponseListEvent, List<CustomEvent>>() {
               @Override
               public List<CustomEvent> call(ResponseListEvent responseListEvent) {
                   CustomEvent[] result = responseListEvent.getResult();
                   return Arrays.asList(result);
               }
          })
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Subscriber<List<CustomEvent>>() {
               @Override
               public void onCompleted() {

               }

               @Override
               public void onError(Throwable e) {

               }

               @Override
               public void onNext(List<CustomEvent> customEvents) {
                  mAdapter.refresh(customEvents);
               }
          });

对结构框架不太清楚的请看利用Retrofit创建自己的网络框架
全文结束,跟多衍生的还是需要深入的研究RxJava和Retrofit。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值