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.实例化与抽象化数据库…

vue 导出el-table选择的数据使用笔记

1、安装 cnpm i vue-json-excel --save 2、使用 1、引入 import JsonExcel from vue-json-excel 2、注册 components: {downloadExcel:JsonExcel,}, 3、页面使用 data&#xff1a;{return {excelName:每日火化量统计${new Date().valueOf()}.xls,json_fields:{"类…

Node.js 事件循环简单介绍

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

Windows编译动态库没有生成.lib文件问题

最近修改了一个项目&#xff0c;以前生成静态库&#xff0c;后改为生成动态库&#xff0c;在Linux上没有问题&#xff0c;但在Windows上只生成了.dll文件&#xff0c;没有生成.lib文件。 在Windows中&#xff0c;.lib文件除了可以用作静态链接库外&#xff0c;还有另一种用途&…

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

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

Django分页器

1 Django的分页器&#xff08;paginator&#xff09;简介 在页面显示分页数据&#xff0c;需要用到Django分页器组件 from django.core.paginator import Paginator Paginator对象&#xff1a; paginator Paginator(user_list, 10) # per_page: 每页显示条目数量 # coun…

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…

基于Java住院部病人信息管理系统

基于Java住院部病人信息管理系统 功能需求 1、病人信息管理&#xff1a;系统需要提供病人信息管理功能&#xff0c;包括病人的基本信息&#xff08;如姓名、性别、年龄、联系方式等&#xff09;和医疗信息&#xff08;如病史、病情、诊断结果等&#xff09;。 2、病房管理&a…

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

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

可信人工智能

定义 可信AI&#xff0c;就是确保AI的公平性、可解释性、健壮性和透明性&#xff0c;确保算法可被人信任。 存在的问题 算法不鲁棒导致的应用风险 自动驾驶汽车未能及时识别行人导致的交通事故黑箱模型导致算法难以解释&#xff0c;对用户不透明 难以推广至医疗、金融等需要…

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;就能完成。将功能代码放到某个地方。函数的设计就是为了代码复用。 声明函数和调用…

《人性的弱点》读后感

《人性的弱点》这本书的每个章节都引人深思&#xff0c;让我对人性有了更深入的理解。以下是我对每个章节的读后感&#xff1a; 第一章&#xff1a;自我意识 这一章讲述了人性中最基本的一面&#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…

Chrome 将禁止修改 document.domain

参考链接1&#xff1a;https://developer.chrome.com/blog/immutable-document-domain?hlzh-cn 参考链接2&#xff1a;https://juejin.cn/post/7238980109453525050 为什么设置document.domain,跨域依旧报错&#xff1f;

推荐系统,推荐模型中负样本的选择和采集

推荐系统中&#xff0c;负样本的采集通常是一个挑战&#xff0c;因为用户往往只提供他们喜欢的项目的反馈&#xff0c;而不喜欢的项目的反馈通常是缺失的。以下是一些常见的负样本采集策略&#xff1a;   1. 随机采样&#xff1a;这是最常见的策略&#xff0c;就是从用户未互…

摇头机,舞台灯,白色家电,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;低成…