MVP+Retrofit+RxJava+Dagger框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jinhuoxingkong/article/details/76260032




MVP和Retrofit还有Dagger的使用和我们平常是差不多的,这里就不过多的讲解了
主要来讲解一下RxJava和Retrofit的结合

下面我们来看一下RxJava和retrofit的结合使用,为了使Rxjava与retrofit结合,我们需要在Retrofit对象建立的时候添加一句代码addCallAdapterFactory(RxJavaCallAdapterFactory.create()),当然你还需要在build.gradle文件中添加如下依赖:
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

完整的代码如下:
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.douban.com/v2/")
        .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//支持RxJava
        .build();

然后我们还需要修改RetrofitService 中的代码:
public interface RetrofitService {
    @GET("book/search")
    Observable<Book> getSearchBook(@Query("q") String name,
                                    @Query("tag") String tag, @Query("start") int start,
                                    @Query("count") int count);

可以看到,在原来的RetrofitService 中我们把getSearchBook方法返回的类型Call改为了Observable,也就是被观察者。其他都没变。然后就是创建RetrofitService 实体类:
RetrofitService service = retrofit.create(RetrofitService.class);

和上面一样,创建完RetrofitService ,就可以调用里面的方法了:
Observable<Book> observable =  service.getSearchBook("Hello", null, 0, 1);

其实这一步,就是创建了一个rxjava中observable,即被观察者,有了被观察者,就需要一个观察者,且订阅它:
observable.subscribeOn(Schedulers.io())//请求数据的事件发生在io线程
          .observeOn(AndroidSchedulers.mainThread())//请求完成后在主线程更显UI
          .subscribe(new Observer<Book>() {//订阅
              @Override
              public void onCompleted() {
                  //所有事件都完成,可以做些操作。。。
              }
              @Override
              public void onError(Throwable e) {
                  e.printStackTrace(); //请求过程中发生错误
              }
              @Override
              public void onNext(Book book) {//这里的book就是我们请求接口返回的实体类    
              }
           }

在上面中我们可以看到,事件的消费在Android主线程,所以我们还要在build.gradle中添加如下依赖:
compile 'io.reactivex:rxandroid:1.2.0'

这样我们就引入了RxAndroid,RxAndroid其实就是对RxJava的扩展。比如上面这个Android主线程在RxJava中就没有,因此要使用的话就必须得引用RxAndroid。




阅读更多

没有更多推荐了,返回首页