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

Retrofit - Call 接口与 Observable 接口

一、Call 接口

Response<T>execute()
  1. execute 方法:同步执行,直接返回Response<T>。会阻塞,不能在主线程用
voidenqueue(Callback<T>callback)
  1. enqueue 方法:异步执行,回调里拿结果。Retrofit 自动切,网络请求在子线程,回调在主线程
voidcancel()
  1. cancel 方法:取消当前请求
booleanisCanceled()
  1. isCanceled 方法:是否已取消
booleanisExecuted()
  1. isExecuted 方法:是否已执行过
Call<T>clone()
  1. clone 方法:克隆一个新的 Call,因为原 Call 只能执行一次

二、创建 Observable

1、just 方法
(1)基本介绍
  • just 方法:直接发射已知数据
publicstatic<@NonNullT>Observable<T>just(@NonNullTitem1,@NonNullTitem2,@NonNullTitem3)
(2)演示
Observable<String>observable=Observable.just("Hello","World","!");observable.subscribe(s->System.out.println("just: "+s));
  • 输出结果
just: Hello just: World just: !
2、fromCallable 方法
(1)基本介绍
  • fromCallable 方法:同步任务转异步
publicstatic<@NonNullT>Observable<T>fromCallable(@NonNullCallable<?extendsT>callable)
(2)演示
Observable<String>observable=Observable.fromCallable(()->{Thread.sleep(1000);return"从数据库查询的结果";});observable.subscribe(s->System.out.println("fromCallable: "+s));
  • 输出结果
fromCallable: 从数据库查询的结果
3、fromIterable 方法
(1)基本介绍
  • fromIterable 方法:遍历集合逐个发射
publicstatic<@NonNullT>Observable<T>fromIterable(@NonNullIterable<?extendsT>source)
(2)演示
List<String>list=Arrays.asList("A","B","C");Observable<String>observable=Observable.fromIterable(list);observable.subscribe(s->System.out.println("fromIterable: "+s));
  • 输出结果
fromIterable: A fromIterable: B fromIterable: C
4、create 方法
(1)基本介绍
  • create 方法:自定义 Observable 发射数据
publicstatic<@NonNullT>Observable<T>create(@NonNullObservableOnSubscribe<T>source)
(2)演示
Observable<Object>observable=Observable.create(emitter->{emitter.onNext("第 1 个数据");emitter.onNext("第 2 个数据");emitter.onComplete();});observable.subscribe(data->System.out.println("create 收到:"+data),error->System.out.println("错误:"+error),()->System.out.println("完成!"));
  • 输出结果
create 收到:第 1 个数据 create 收到:第 2 个数据 完成!
5、defer 方法
(1)基本介绍
  • defer 方法:每次订阅都重新创建
publicstatic<@NonNullT>Observable<T>defer(@NonNullSupplier<?extends@NonNullObservableSource<?extendsT>>supplier)
(2)演示
Observable<Long>observable=Observable.defer(()->Observable.just(System.currentTimeMillis()));observable.subscribe(time->System.out.println("第 1 次:"+time));try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}observable.subscribe(time->System.out.println("第 2 次:"+time));
  • 输出结果
第 1 次:1786448460769 第 2 次:1786448461773
6、interval 方法
(1)基本介绍
  • interval 方法:定时轮询
publicstaticObservable<Long>interval(longperiod,@NonNullTimeUnitunit)
(2)演示
Observable<Long>observable=Observable.interval(1,TimeUnit.SECONDS);observable.take(3)// 只取前 3 个,避免无限输出.subscribe(num->System.out.println("心跳第 "+num+" 次"));
  • 输出结果
心跳第 0 次 心跳第 1 次 心跳第 2 次

三、Observable 转换操作

1、map 方法
(1)基本介绍
  • map 方法:1 对 1 转换
publicfinal<@NonNullR>Observable<R>map(@NonNullFunction<?superT,?extendsR>mapper)
(2)演示
Observable<String>observable=Observable.just("123");observable.map(s->Integer.parseInt(s)).map(i->i*2).subscribe(result->System.out.println("map 结果:"+result));
  • 输出结果
map 结果:246
2、flatMap 方法
(1)基本介绍
  • flatMap 方法:1 对 N 转换,不保证顺序
publicfinal<@NonNullR>Observable<R>flatMap(@NonNullFunction<?superT,?extendsObservableSource<?extendsR>>mapper)
(2)演示
Observable<String>observable=Observable.just("A","B");observable.flatMap(letter->Observable.just(letter+"1",letter+"2")).subscribe(s->System.out.println("flatMap: "+s));
  • 输出结果
flatMap: A1 flatMap: A2 flatMap: B1 flatMap: B2
(3)经典用法
  • App 有一个推荐关注列表,需要先获取 10 个用户的 ID,然后同时去服务器下载这 10 个人的头像
Observable.just(1,2,3,4,5,6,7,8,9,10).flatMap(userId->apiService.getUserAvatar(userId).subscribeOn(Schedulers.io())).subscribe(avatarUrl->{displayAvatar(avatarUrl);});
3、concatMap 方法
(1)基本介绍
  • concatMap 方法:1 对 N 转换,保证顺序
publicfinal<@NonNullR>Observable<R>concatMap(@NonNullFunction<?superT,?extendsObservableSource<?extendsR>>mapper)
(2)演示
Observable<String>observable=Observable.just("A","B","C");observable.concatMap(letter->Observable.just(letter+"1",letter+"2")).subscribe(s->System.out.println("concatMap: "+s));
  • 输出结果
concatMap: A1 concatMap: A2 concatMap: B1 concatMap: B2 concatMap: C1 concatMap: C2
4、buffer 方法
(1)基本介绍
  • buffer 方法:批量处理
publicfinalObservable<@NonNullList<T>>buffer(intcount)
(2)演示
Observable<Integer>observable=Observable.range(1,10);observable.buffer(3)// 每 3 个打包成 List.subscribe(list->System.out.println("buffer: "+list));
  • 输出结果
buffer: [1, 2, 3] buffer: [4, 5, 6] buffer: [7, 8, 9] buffer: [10]
http://www.jsqmd.com/news/1380797/

相关文章:

  • 从能用进阶到会玩:pytest自动化测试框架深度解析与实战
  • 2026年8月智能仓储厂家:自动化智能货架仓储生产企业深度盘点
  • 网上预约公立医院慢病防癌筛查体检,要看哪些服务能力?卫蓝鲸鱼帮你分析 - 滚动商讯
  • 【硬核计算】只靠阳光和水,一辆氢能车到底能不能日常代步?——光伏制氢 + 纯氢内燃机短途闭环的能量账与技术剖析
  • 眼视光设备采购指南:从设备选型到服务闭环,AI数字视光技术应用与投资回报分析
  • ai相关: linux安装codex
  • 免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:Windows装包被防病毒拦了 看安装日志和签名链的实战
  • GEO 培训哪家靠谱:【沐晞甄选】以诚为本 - 18002239949
  • 2026合规为王!杭州滴滴**直营二手网约车全资质车辆清单解读 - 滚动商讯
  • Claude服务中断与能力分层:AI模型架构变革与开发者应对策略
  • Token Router 实战:基于预算的智能 API 路由与成本管控方案
  • 函数调用参数不匹配错误全解析:从C语言到命令行
  • 叠叠高:3D 方块精准叠放,越叠越快越上头
  • HS2-HF_Patch汉化补丁:一站式解决Honey Select 2本地化与增强需求
  • Pythonic COMSOL多物理场仿真:基于JPype架构的高性能自动化接口设计
  • 揭秘网站建设需要做些什么:从底层逻辑到落地执行的完整指南
  • 四流一致(合同流、业务流、资金流、发票流)
  • 第三章:GEM分析:3.2 drm_gem_object——GPU 内存对象的核心抽象(静态字段视角)
  • BannerlordCoop终极指南:5步快速实现骑马与砍杀2多人联机
  • 动态规划解三角形牧场:从信奥题看DP状态设计与优化
  • 2026年东莞标书代写机构精选推荐|智能制造电子信息电子标全流程服务 - 安华招标
  • 免费开源的WPS AI插件 察元AI助手:PluginStorage 与模型列表冷启动
  • 免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:macOS首次启动报无法验证 开发者签名与公证的现实做法
  • Windows平台FCL碰撞检测库编译集成实战指南
  • 开源免费的WPS AI 软件 察元AI文档助手:# 链路 023:getChatApiConfigByProvider 与 /chat/completions 路径
  • C++异常处理实战指南:从RAII到noexcept的完整避坑手册
  • Docker 运行时加固清单:权限、凭据与镜像签名
  • GEO 培训哪家口碑好:【沐晞甄选】誉不绝口 - 17728098551
  • 2026精密仪器出口东南亚物流哪家靠谱?福要恒温气垫特种物流零货损保障 - 滚动商讯
  • 设计师必备:高效筛选统一风格素材的4个维度与实战技巧