栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Retrofit & Rxjava3 & RxAndroid

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Retrofit & Rxjava3 & RxAndroid

Retrofit & Rxjava3
  • Retrofit:https://blog.csdn.net/followYouself/article/details/120317044
引用库
  • 本文主要分析 implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'的源码
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0' // rxJava的适配器

implementation "io.reactivex.rxjava3:rxjava:3.1.1"
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
代码示例
  • RxJava3CallAdapterFactory用于配置callAdapter,RxJava3CallAdapterFactory#create()默认情况下异步进行网络请求。
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com/") // 配置URL
         // 配置网络请求的adapter,将retrofit2.Call转换为Observable对象
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create()) // 配置解析网络返回数据的apdater,解析json
        .build();

GitHubService service = retrofit.create(GitHubService.class);
Observable> observable = service.listRepos("octocat"); // observable对象类型retrofit2.adapter.rxjava3.CallEnqueueObservable
observable.subscribeOn(Schedulers.io()) // 配置网络请求的IO方式
        .observeOn(AndroidSchedulers.mainThread()) // 在主线程处理收到的数据
        .subscribe(new Observer>() { // subscribe函数调用之后才真正的发起网络请求
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.i(TAG, "onSubscribe");
            }

            @Override
            public void onNext(@NonNull List repos) {
                Log.i(TAG, "onNext");
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.i(TAG, "onError");

            }

            @Override
            public void onComplete() {
                Log.i(TAG, "onComplete");

            }
        });
RxJava3CallAdapterFactory
  • 生成CallAdapter,用于进行网络请求。将retrofit2.Call转换为Observable对象。
  • 构造函数可以配置scheduler调度器,还可以选择是否是异步请求。RxJava3CallAdapterFactory#create默认配置异步请求。
private RxJava3CallAdapterFactory(@Nullable Scheduler scheduler, boolean isAsync) {
  this.scheduler = scheduler;
  this.isAsync = isAsync;
}
  • RxJava3CallAdapterFactory#get中会构造RxJava3CallAdapter对象,返回给Retrofit网络请求是调用。
RxJava3CallAdapter
  • RxJava3CallAdapter#adapt(Call call)将标准的retrofit2.Call转换为Observable、Flowable、Maybe、Single等Rxjava对象。
  • Retrofit生成的默认Observable对象类型是retrofit2.adapter.rxjava3.CallEnqueueObservable或者CallExecuteObservable。参考RxJava3CallAdapter#adapt(Call call)。
  • RxJava3CallAdapter构造函数通过几个布尔变量来决定返回的对象类型。这也代表了com.squareup.retrofit2:adapter-rxjava3所支持的Rxjava对象类型。
retrofit2.adapter.rxjava3.RxJava3CallAdapter#RxJava3CallAdapter
  private final @Nullable Scheduler scheduler; // 被观察者的线程调度器,RxJava3CallAdapterFactory可以配置
  private final boolean isAsync; // 网络请求是同步还是异步
  private final boolean isResult;
  private final boolean isBody; // onNext中参数是response.body()的返回值
  private final boolean isFlowable; // Flowable类型
  private final boolean isSingle; //Single类型
  private final boolean isMaybe; // Maybe 类型
  private final boolean isCompletable;
  • CallEnqueueObservable 和 CallExecuteObservable实际发起了网络请求,调用了retrofit2.Call#enqueue或者retrofit2.Call#execute方法。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号