IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Retrofit & Rxjava3 & RxAndroid -> 正文阅读

[移动开发]Retrofit & Rxjava3 & RxAndroid

Retrofit & Rxjava3

引用库

  • 本文主要分析 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<T>转换为Observable<T>对象
        .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create()) // 配置解析网络返回数据的apdater,解析json
        .build();

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

            @Override
            public void onNext(@NonNull List<Repo> 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<T>转换为Observable<T>对象。
  • 构造函数可以配置scheduler调度器,还可以选择是否是异步请求。RxJava3CallAdapterFactory#create默认配置异步请求。
private RxJava3CallAdapterFactory(@Nullable Scheduler scheduler, boolean isAsync) {
  this.scheduler = scheduler;
  this.isAsync = isAsync;
}
  • RxJava3CallAdapterFactory#get中会构造RxJava3CallAdapter对象,返回给Retrofit网络请求是调用。

RxJava3CallAdapter

  • RxJava3CallAdapter#adapt(Call<R> call)将标准的retrofit2.Call<T>转换为Observable<T>Flowable<T>Maybe<T>Single<T>等Rxjava对象。
  • Retrofit生成的默认Observable对象类型是retrofit2.adapter.rxjava3.CallEnqueueObservable或者CallExecuteObservable。参考RxJava3CallAdapter#adapt(Call<R> 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;
  • CallEnqueueObservableCallExecuteObservable实际发起了网络请求,调用了retrofit2.Call#enqueue或者retrofit2.Call#execute方法。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 17:00:30  更:2021-10-01 17:00:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:44:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码