当前位置: 首页 > news >正文

【Android】Retrofit2和RxJava2新手快速上手

写这篇博客的目的

网上关于Retrofit2和RxJava2的博客特别多,但是内容特别复杂,一上来就讲解很高级的用法

其实我们没必要像高考做题家一样,把每个API都背的滚瓜烂熟

熟悉基本用法,高阶用法需要的时候再逐个了解就行了

因为博客本身是脱离具体应用环境的,很难通过文字把每个点讲得透彻,大可不必太过追求面面俱到

所以这篇博客的主要目的,只是为了讲解一下核心用法,对于不求甚解的新手来说,看完基本已经够用了

Retrofit示例

OkHttpClient client = null;Retrofit.Builder builder = new Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).client(client).baseUrl(baseUrl);Retrofit retrofit = builder.build();ApiService service = retrofit.create(ApiService.class);

Retrofit讲解

addCallAdapterFactory 指定Call适配器,用于将Call转换为Flowable

addConverterFactory 只懂Body适配器,用于将Body转换为Bean

client 指定OkHttpClient

baseUrl 指定后台接口根路径

ApiService 指定请求格式和内容

RxJava示例

Observable<BookListVo> bookListVoObservable = apiService.getBookList();Observable<BannerListVo> bannerListVoFlowable = apiService.getBannerData();Observable concatFlowable = Observable.concat(bookListVoObservable, bannerListVoFlowable);concatFlowable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());concatFlowable.subscribe(new Observer() {@Overridepublic void onSubscribe(Disposable disposable) {//开始执行网络请求}@Overridepublic void onNext(Object concatVo) {//网络请求执行成功}@Overridepublic void onError(Throwable throwable) {//网络请求执行失败}@Overridepublic void onComplete() {//所有请求全部执行完毕}});

RxJava讲解

Observable 封装一个事件,这里是网络请求

Observable.concat 将多个事件串联起来执行

subscribeOn 指定订阅事件的线程,这里是执行网络请求的线程

observeOn 指定接收事件的线程,这里是网络请求执行成功,处理回复数据的线程

subscribe 指定事件订阅者和接收者

onSubscribe 事件被订阅,这里是即将开始执行网络请求

onNext 接收到新事件,这里是网络请求返回数据

onError 接收或处理事件时发生异常,这里是处理网络回复数据异常

onComplete 所有事件全部发送完毕,这个方法要手动调用才会触发

onSubscribe的线程由subscribeOn方法指定

onNext的线程由observeOn方法指定

http://www.lryc.cn/news/112331.html

相关文章:

  • 1.4 Nacos注册中心
  • AOJ 2200 Mr. Rito Post Office 最短路径+动态规划+谨慎+思维
  • 红米电视 ADB 安装 app 报错 failed to authenticate xxx:5555
  • Linux 下设置开机自启动的方法
  • MySQL常见问题处理(三)
  • maven中常见问题
  • vue2中bus的使用
  • 实证研究在机器学习中的应用
  • IO进程线程day8(2023.8.6)
  • 【5G NR】逻辑信道、传输信道和物理信道的映射关系
  • tmux基础教程
  • 项目实战 — 消息队列(4){消息持久化}
  • AI编程工具Copilot与Codeium的实测对比
  • webpack基础知识六:说说webpack的热更新是如何做到的?原理是什么?
  • Linux从安装到实战 常用命令 Bash常用功能 用户和组管理
  • webpack基础知识三:说说webpack中常见的Loader?解决了什么问题?
  • 深度学习:Pytorch常见损失函数Loss简介
  • 【Android-java】Parcelable 是什么?
  • Spring整合MyBatis小实例(转账功能)
  • List集合的对象传输的两种方式
  • 海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?
  • 【秋招】算法岗的八股文之机器学习
  • 为什么list.sort()比Stream().sorted()更快?
  • SQL账户SA登录失败,提示错误:18456
  • Linux 终端操作命令(1)
  • java与javaw运行jar程序
  • 安装和配置 Home Assistant 教程 HACS Homkit 米家等智能设备接入
  • 解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题
  • 安全杂记 - 复现nodejs沙箱绕过
  • 信息安全事件分类分级指南