Retrofit嵌套请求与适配器

一、前言:

1.        retrofit嵌套请求

在实际开发中,可能会存在:需要先请求A接口,在请求B接口的情况,比如进入“玩android”网页请求获取收藏文章列表,但是需要先登录拿到Cookie才能请求搜藏文章几口,此时请求就有了先后顺序,为了完成该功能,我们需要这样实现代码。

代码显得就很冗杂。

2.Retrofit适配器

Retrofit的接口返回的方法必须是Call,如果能够将Call改为RxJava的Observable。对于嵌套而言就得到了非常方便的解决,这就是适配器的功能。如果我们想要返回的不是Call适配器就能帮助我们转换为其他类型。

3.添加依赖:

    implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'

如果是Android开发还需要引入

    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'

二、代码实现

1.创建接口类对象

public interface WanAndroidService2 {/*** 学习Retrofit嵌套请求与适配器* 登录接口* @param username* @param pwd* @return*/@POST("user/login")@FormUrlEncodedFlowable<BaseResponse> login2(@Field("username") String username, @Field("password") String pwd);/*** 学习Retrofit嵌套请求与适配器* 获取收藏文章列表* @return*/@GET("lg/collect/list/{pageNum}/json")Flowable<ResponseBody> getArticle(@Path("pageNum") int pageNum);
}

2.代码实现

public class WanAndroidUnitTest {/*** 学习Retrofit嵌套请求与适配器*/Map<String,List<Cookie>> cookies = new HashMap<>();//全局变量接收cookieRetrofit retrofit3 = new Retrofit.Builder().baseUrl("https://www.wanandroid.com/").callFactory((okhttp3.Call.Factory) new OkHttpClient.Builder().cookieJar(new CookieJar() {@Overridepublic void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List<Cookie> list) {cookies.put(httpUrl.host(),list);}@NonNull@Overridepublic List<Cookie> loadForRequest(@NonNull HttpUrl httpUrl) {List<Cookie> cookies = WanAndroidUnitTest.this.cookies.get(httpUrl.host());return cookies == null ? new ArrayList<>() :cookies;}}).build()).addConverterFactory(GsonConverterFactory.create())//添加转换器.addCallAdapterFactory(RxJava3CallAdapterFactory.create())//添加适配器.build();//创建retrofit对象WanAndroidService2 wanAndroidService3 = retrofit3.create(WanAndroidService2.class);//创建接口类对象,并且设置为全局变量。@Testpublic void rxjavaText(){//切换线程,如果是android请求的话必须把网络请求切换到一个子线程//把观察的回调切换到android的主线程,现在在java环境中。如果是在android环境中就需要把subscribeOn(Schedulers.newThread())换成.subscribeOn(AndroidSchedulers.mainThread())  。使得我们接口的回调是在主线程              .subscribeOn(AndroidSchedulers.mainThread())wanAndroidService3.login2("Anglin","rssqzqyp").flatMap(new Function<BaseResponse, Publisher<ResponseBody>>() {@Overridepublic Publisher<ResponseBody> apply(BaseResponse baseResponse) throws Throwable {return wanAndroidService3.getArticle(0);}}).observeOn(Schedulers.io()).subscribeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<ResponseBody>() {@Overridepublic void accept(ResponseBody responseBody) throws Throwable {System.out.println(responseBody.string());}});while (true){}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day01、什么是数据库系统?

数据库系统介绍 1.实例化与抽象化数据库系统2.从用户角度看数据库管理系统的功能2.1 数据库定义功能2.2 数据库操纵2.3 数据库控制2.4 数据库维护功能2.5 数据库语言与高级语言 3.从系统&#xff1a;数据库管理系统应具有什么功能 来源于战德臣的B站网课 1.实例化与抽象化数据库…

Node.js 事件循环简单介绍

1.简介 Node.js 事件循环是 Node.js 运行时环境中的一个核心机制&#xff0c;用于管理异步操作和回调函数的执行顺序。它基于事件驱动模型&#xff0c;通过事件循环来处理和派发事件&#xff0c;以及执行相应的回调函数。 Node.js 是单进程单线程应用程序&#xff0c;但是因为…

QT QIFW Windows下制作安装包(一)

一、概述 1、QIFW是一款基于QT框架开发的跨平台安装框架。QIFW是QT Installer FrameWork的缩写&#xff0c;支持Windows、Linux和macos等多种平台。QIFW可以帮助开发者创建自己的安装程序&#xff0c;将它们打包到通用的安装包中&#xff0c;并提供可视化的界面进行安装。 2…

mysql:用SHOW CREATE TABLE tbl_name查看创建表的SQL语句

https://dev.mysql.com/doc/refman/8.2/en/show-create-table.html 可以用SHOW CREATE TABLE tbl_name查看创建表的SQL语句。 例如&#xff0c;SHOW CREATE TABLE test_table;表示查询创建test_table表的SQL语句&#xff1a;

刘元昌:期待更多年轻人的第一杯精酿是失眠企鹅

12月7日下午&#xff0c;2023&#xff08;第十八届&#xff09;大河财富中国论坛盛大开启。作为先行论坛&#xff0c;2023新消费峰会火热开场。此次峰会以“提质新消费 释放新活力”为主题&#xff0c;集论坛、演绎、展示、互动为一体&#xff0c;把峰会变身“秀场”&#xff0…

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足

目录 前言 出现的问题: 解决方法&#xff1a; 编译安装&#xff1a; 极速安装 其他 我的其他博客 前言 说实话&#xff0c;本人也就是个穷学生买不起啥大的服务器啥的&#xff0c;整了个2核 2内存的服务器 用宝塔按mysql5.5是没问题的&#xff0c;一切换8.0就提醒内存不足…

UE5 - ArchvizExplorer与Map Border Collection结合 - 实现电子围栏效果

插件地址&#xff1a; https://www.unrealengine.com/marketplace/zh-CN/product/archviz-explorer https://www.unrealengine.com/marketplace/zh-CN/product/map-border-collection ArchvizExplorer扩展&#xff1a; https://download.csdn.net/download/qq_17523181/8843305…

freemarker+Aspose.word实现模板生成word并转成pdf

需求&#xff1a;动态生成pdf指定模板 实现途径&#xff1a;通过freemarker模板&#xff0c;导出word文档&#xff0c;同时可将word转为pdf。 技术选择思路 思路一&#xff1a;直接导出pdf 使用itext模板导出pdf 适用范围 业务生成的 pdf 是具有固定格式或者模板的文字及其…

数据采集网关:工业数据采集上云

数据采集网关&#xff0c;以其高效、便捷的特点&#xff0c;成为了现代工业物联网数据采集处理的重要工具。它是连接不同数据源和数据接收设备的桥梁&#xff0c;将各种形式和格式的数据快速、安全地汇聚到一起。通过数据采集网关&#xff0c;企业可以轻松实现数据的整合、转换…

函数创建与使用

函数使用的原因 函数是设计出来是为了完成某项功能的代码块。只要调用就能执行。实现代码复用。代码复用是不是复制&#xff0c;而是同样的代码不用写很多。只要用调用的代码来写&#xff0c;就能完成。将功能代码放到某个地方。函数的设计就是为了代码复用。 声明函数和调用…

【算法题】字符统计及重排(js)

解法&#xff1a; const str "xyxyXX"; const str1 "abababb"; function solution(str) {const strArr str.split("").sort((a, b) > a - b);const map new Map();for (let i 0; i < strArr.length; i) {if (map.has(strArr[i])) {m…

摇头机,舞台灯,白色家电,3D打印,医疗器械等安防芯片步进驱动选型GC系列,低成本,大电流

GLOBALCHIP新一代的安防产品用的芯片&#xff0c;GC3901 GC3909 GC3910 GC3911 GC8548 GC8549 GC6609 GC6610 GC2003 GC2803 GC2804步进驱动 达林顿选型型号&#xff0c;采用12V H 桥驱动器。其中最大持续电流(A)可达2.5A。其中GC6610&#xff0c;GC6609 是36V&#xff0c;低成…

14-Kafka-Day02

第 4 章 Kafka Broker 4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 &#xff08;1&#xff09;启动 Zookeeper 客户端。 bin/zkCli.sh 因为你在配置kafka的时候指定了它的名字。 &#xff08;2&#xff09;通过 ls 命令可以查看 kafka 相关信息。 [zk: …

超越边界:Mistral 7B挑战AI新标准,全面超越Llama 2 13B

引言 在人工智能领域&#xff0c;模型的性能一直是衡量其价值和应用潜力的关键指标。近日&#xff0c;一个新的里程碑被设立&#xff1a;Mistral AI发布了其最新模型Mistral 7B&#xff0c;它在众多基准测试中全面超越了Llama 2 13B模型&#xff0c;标志着AI技术的一个重大进步…

深兰科技“汉境”入选2023年湖北省人工智能十大优秀应用案例

11月18日&#xff0c;央视“专精特新制造强国”城市大会在湖北武汉召开。会上&#xff0c;正式发布了“湖北省工业互联网标识十大优秀应用案例”&#xff0c;由深兰科技(武汉)股份有限公司基于AIGC多模态融合大模型技术开发打造的江汉路步行街元宇宙场景应用——汉境&#xff0…

Java异步编程之利器:Guava异步编程实践

第1章&#xff1a;引言 - 为什么要用Guava进行异步编程&#xff1f; 大家好&#xff0c;我是小黑&#xff01;今天咱们要聊的是Guava在异步编程中的应用。首先&#xff0c;让我们搞清楚为什么要用Guava来处理异步任务。在Java的世界里&#xff0c;异步编程是个老话题了&#x…

漏洞复现--速达进存销管理系统任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

vue项目 treeselect校验不生效

使用treeselect时&#xff0c;el-form表单检验rules不生效&#xff0c;使用blur与change都无效&#xff0c;我的解决方法代码如下&#xff1a; 在treeselect标签里使用select方法&#xff0c;该方法为选择一个项后发出&#xff0c;在每次选择组织的时候都进行unitId的校验。 …

KaiwuDB 获评信通院 2023 大数据“星河”标杆案例

12月6日&#xff0c;由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSA TC601) 共同组织的 2023 大数据“星河(Galaxy)”案例评选结果正式公示&#xff0c;“基于 KaiwuDB 的台区云储能示范项目”历经多环节严苛评审&#xff0c;从累计 706 份申报项目中…

el-table表格出现滚动条的时候,内容和表头对不齐

1&#xff0c;在获取表格数据完成后的位置加 this.$nextTick(() > {this.$refs.templateData.doLayout(); })2,要记得在上加上ref <el-table ref"templateData" ></el-table>加完之后的