MVP+Retrofit+RxJava+Dagger框架

Posted 劲火星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVP+Retrofit+RxJava+Dagger框架相关的知识,希望对你有一定的参考价值。




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。




以上是关于MVP+Retrofit+RxJava+Dagger框架的主要内容,如果未能解决你的问题,请参考以下文章

Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

RxJava+Retrofit+OkHttp深入浅出-mvp(使用篇)

MVP+Retrofit+RxJava探索之路

开发 Material Design+RxJava+Retrofit+MVP App 参考资料

Mvp Retrofit Okhttp Rxjava

MVP模式入门(结合Rxjava,Retrofit)