okhttp添加公共参数
在项目开发中很多时候后台都会给一些全局的公共入参,比如携带手机信息或者时间戳等字段。而我们在使用okhttp时,就需要我们单独就行二次封装处理了,对于请求全局参数,每次请求都要去写一次,那是肯定不行的。
所以就要我们自己处理。
okhttp一个强大的功能拦截器,该功能采用责任链模式,不清楚的自行百度。我采用的就是这种方案。
需要用到的知识点HttpUrl,FormBody
直接用代码解说
import android.util.Log
import okhttp3.FormBody
import okhttp3.HttpUrl
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Responseprivate const val TAG = "RequestInterceptor"/*** 自定义的拦截器*/
class RequestInterceptor : Interceptor {override fun intercept(chain: Interceptor.Chain): Response {// 旧的请求体val oldRequest = chain.request()var newFormbodyData: FormBody? = nullvar newRequest: Request? = nullif ("POST" == oldRequest.method) {// 公共参数,所有请求必须携带的,我们重新new一个请求体FormBody// 这个请求体只包含我们共有的请求参数val builder = FormBody.Builder()builder.addEncoded("brand", "Xiaomi")builder.addEncoded("model", "MIX+2")val formBody = builder.build()// 获取我们旧的请求体val requestBody = oldRequest.body// 创建我们最终的请求体val newFormBody = FormBody.Builder()// 将共有的请求参数放入我们最终的请求体中for (i in 0 until formBody.size) {newFormBody.addEncoded(formBody.encodedName(i), formBody.encodedValue(i))}// 如果配合retrofit使用,需要注意一点,在发送的post请求如果没有自己独有的字段// 一定要对requestBody判断是不是formBodyrequestBody?.let {// 通过判断之前旧的请求体是否包含有请求参数// 如果有的话就添加进最终请求体if (it.contentLength() > 0) {val formBody1 = it as FormBodyfor (i in 0 until formBody1.size) {newFormBody.addEncoded(formBody1.encodedName(i), formBody1.encodedValue(i))}}}// 拿到我们最终的请求体newFormbodyData = newFormBody.build()// 重新构建一个requsest 将请求体放入进去newRequest = oldRequest.newBuilder().post(newFormbodyData!!).build()} else if ("GET" == oldRequest.method) {// 如果是get请求,我们创建一个新的HttpUrl// 用来储存我们的scheme,host,path// 这段代码相当于最原始的get请求配置的信息// val httpurl = HttpUrl.Builder()// .scheme("https")// .host("www.hxeduonline.com")// .addPathSegments("mobileapi2")// .addPathSegments("index.php")// .addQueryParameter("act", "xxx")// .addQueryParameter("op", "xxxx")val publicParameter = HttpUrl.Builder()val httpUrl = oldRequest.urlval pathSegments = httpUrl.pathSegmentspublicParameter.scheme(httpUrl.scheme)publicParameter.host(httpUrl.host)// 将path路径赋值给最新的HttpUrlpathSegments.forEach {publicParameter.addEncodedPathSegments(it)Log.d(TAG, "intercept: $it")}// 设置共有的参数publicParameter.addEncodedQueryParameter("brand", "Xiaomi")publicParameter.addEncodedQueryParameter("model", "MIX+2")// 将接口自带的参数放入到最终的httpUrlfor (i in 0 until httpUrl.querySize) {publicParameter.addQueryParameter(httpUrl.queryParameterName(i),httpUrl.queryParameterValue(i))}// 构建httpUrlval build = publicParameter.build()// 构建一个新的requestnewRequest = oldRequest.newBuilder().url(build).get().build()}// 全局配置参数就完成了,思路基本就是这样,扩展可以根据自己需求,比如加密都可以在这里处理return chain.proceed(newRequest!!)}
}
相关文章:
okhttp添加公共参数
在项目开发中很多时候后台都会给一些全局的公共入参,比如携带手机信息或者时间戳等字段。而我们在使用okhttp时,就需要我们单独就行二次封装处理了,对于请求全局参数,每次请求都要去写一次,那是肯定不行的。 所以就要我…...
基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)
开启事务 导入Mybatis-Plus框架后,我们可以使用Mybatis-Plus自带的事务,只需要在配置文件中配置即可 使用配置方式开启日志,设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...
android studio 修改图标
Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境(IDE)。在开发过程中,我们可以根据自己的需求修改 Android Studio 的图标,以个性化我们的开发环境。 本文将介绍如何在…...
pytorch学习之第二课之预测温度
主要有以下几个步骤 第一:导入相应的工具包 第二:导入需要使用的数据集 第三:对导入的数据集输入进行预处理,找出特征与标签,查看数据特征的类型,判断是否需要标准化或者归一化处理 第四:构建神…...
基于Mahony互补滤波的IMU数据优化_学习笔记整理
这周自己被安排进行优化软件 IMU 姿态解算项目,之前自己只简单了解四元数,对IMU数据处理从未接触,通过这一周的学习感觉收获颇丰,在今天光棍节之际,,,用大半天的时间对这一周的收获进行整理&…...
c语言实现哈夫曼编码
要实现哈夫曼编码,需要以下步骤: 统计字符出现的频率构建哈夫曼树遍历哈夫曼树,给不同的字符赋予不同的编码将编码后的字符写入文件中 下面是一个简单的 C 语言实现: #include <stdio.h> #include <stdlib.h> #inc…...
Vuex:模块化Module :VCA模式
VCA中不支持辅助函数,因为辅助函数中是用this.$store,而VCA中没有绑定this的 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。 这句话的意思是,…...
【uni-app + uView】CountryCodePicker 国家区号组件
1. 效果图 2. 组件完整代码 <template><u-popup class="country-code-picker-container" v-if="show" :show...
思科对路由器的配置
②对路由器R2进行配置 对路由器R2进行配置,先对各接口配置基本IP地址,然后配置动态路由协议。(对实验步骤进行文字描述) Router>enable //用户模式进入特权…...
实战Leetcode(三)
Practice makes perfect! 实战一: 带环问题其实我们小学时就接触过,就比如在操场上比赛跑步的追击问题,这里也是一样,如果我们定义两个指针,一个快指针,一个慢指针,快指针走的快&…...
【PTE-day05 宽字节注入】
1、函数 过滤输入的函数: addslashes mysql_real_escape_string mysql_escape_string当字符的大小为一个字节时,称之为窄字节 例如ascii编码 当字符的大小为两个字节时,称之为宽字节 例如GB2312、GBK、GB8030 mysql使用GBK编码时,默认的会认为两个字符为一个汉字,前一个字…...
计算机网络期末复习-Part3
1、rdt1.0,rdt2.0,rdt3.0的底层信道模型 RDT 1.0: 完全可靠的底层信道,没有比特差错,也没有分组丢失。 RDT 2.0: 具有比特差错的底层信道,有比特差错,但没有分组丢失。 RDT 3.0: 具有差错和丢包的底层信道…...
docker在虚拟机中的应用
文章目录 Docker的基础概念与入门docker与docker镜像的理解虚拟机下[ubantu系统下]Docker的安装Docker-engine 的常用命令Docker 的 Example配置Docker的国内源虚拟机安装Postgresql的Docker物理机访问Postgresql数据库利用Docker-engine容器化前端项目工程1. 编写项目电器2. 构…...
小程序样式淡入淡出效果
小程序切换下一个文章或者页面,淡入淡出效果 // detail.js getArticleData: function(articleId) {// 开始淡出效果this.animate(.detail-page, [{ opacity: 1.0, ease: ease-out },{ opacity: 0.0, ease: ease-out }], 500, () > {// 在淡出动画完成后请求文章…...
虚幻5 删除C盘缓存及修改缓存路径
一.修改C盘缓存 C盘缓存路径为: C:\Users\xx(这里是你的用户名)\AppData\Local\UnrealEngine\Common\DerivedDataCache 注意,如果没有AppData文件夹,请依次点击查看-勾选显示隐藏的项目,即可 可删除里面的所有文件即可 二.修改…...
手写C++ 实现链表的反转、删除、合并
目录 一、手写List成员方法 1.1 打印链表 1.2 删除链表节点 1.3 链表中倒数第k个节点 1.4 反转链表 1.5 合并两个排序链表 二、完整代码 一、C实现链表成员方法 在上一篇博客《手写链表C》,实现了基本的List类。在面试中,经常被问到List如何反转、…...
虚幻C++基础 day4
虚幻中的UI 虚幻中的比较常用的UI:Widget Blueprint又称UMG虚幻中的两种布局: 网格布局锚布局 创建Widget Blueprint 网格布局 有点类似Qt中的网格布局,将UI面板进行行列切分Horizontal Box:水平分布Vertical Box:…...
【Vue】【uni-app】工单管理页面实现
用的是uni-app的uni-ui拓展组件实现的 功能是对工单进行一个展示,并对工单根据一些筛选条件进行搜索 目前是实现了除了日期之外的搜索功能,测试数据是下面这个tableData.js,都是我自己手写的,后端请求也稍微写了一些,…...
【系统架构设计】架构核心知识: 2.1 软件过程模型
目录 一 软件过程模型 1 瀑布模型 2 V模型 3 喷泉模型 4 增量模型 5 原型模型...
数据管理系统-week1-文件系统、数据库和数据库管理系统
文章目录 前言一、 文件系统文件系统的限制 二、 数据库系统三、 数据库管理系统参考文献 前言 一、 文件系统 对于更高级的数据处理应用程序来说,基于数据块的持久存储逻辑模型过于简单数据块序列被划分为称为文件的数据块的可变子序列,与文件相关的名…...
实战IPSG:静态绑定如何终结企业内网IP地址私改乱象
1. 企业内网IP私改乱象的烦恼 作为一名在企业里摸爬滚打多年的网络管理员,我最头疼的就是员工私自修改IP地址引发的各种"幺蛾子"。上周又遇到一个典型案例:财务部突然集体断网,排查半天发现是有台打印机被手动设置了和服务器冲突的…...
贝叶斯统计革命:Statistical Rethinking 2023如何改变你的数据分析思维
贝叶斯统计革命:Statistical Rethinking 2023如何改变你的数据分析思维 【免费下载链接】stat_rethinking_2023 Statistical Rethinking Course for Jan-Mar 2023 项目地址: https://gitcode.com/gh_mirrors/st/stat_rethinking_2023 Statistical Rethinking…...
STM32仿真器无法识别内核?可能是这些原因在作祟
1. 硬件连接问题排查 当你发现STM32仿真器无法识别内核时,第一步就该检查硬件连接。我遇到过太多次因为一根杜邦线接触不良,导致整个下午都在瞎折腾的情况。先看看最基础的几个要点: 电源供应是首要检查项。用万用表测量开发板的3.3V和GND之间…...
别再手动调参了!用YOLOv5的K-means+遗传算法,为你的数据集定制专属Anchors
突破目标检测瓶颈:YOLOv5 Anchors优化实战指南 在目标检测任务中,Anchors的质量直接影响模型性能。传统手工设计Anchors的方式早已被自动化方法取代,但大多数开发者仍停留在使用默认Anchors的阶段。本文将揭示如何通过K-means与遗传算法的组合…...
AGI到底强在哪?2026奇点大会首次公开12维能力评估矩阵:含推理深度、跨域泛化率、因果鲁棒性实测数据
第一章:2026奇点智能技术大会:AGI的能力评估 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立跨模态通用智能基准(Cross-Modal General Intelligence Benchmark, CGIB),面向全球开源社区发布统一评估…...
Linux小白看过来:手把手教你用命令行在Ubuntu 16.04搞定MATLAB 2021b
Linux命令行实战:Ubuntu 16.04安装MATLAB 2021b全指南 第一次在Linux系统上安装专业软件?别担心,命令行操作其实比图形界面更高效。本文将带你用终端命令完成MATLAB 2021b的完整安装过程,每个步骤都会解释背后的原理,让…...
Vue项目实战:用3d-force-graph和Neo4j打造炫酷的3D知识图谱(附完整代码)
Vue与Neo4j深度整合:构建高性能3D知识图谱的工程实践 知识图谱作为结构化知识的表现形式,正在成为企业知识管理和智能应用的核心基础设施。本文将深入探讨如何利用Vue.js前端框架与Neo4j图数据库,结合3d-force-graph可视化库,构建…...
LLM 提示工程:技巧与最佳实践
LLM 提示工程:技巧与最佳实践 引言 大语言模型(LLM)如GPT-4、Claude、LLaMA等的出现,彻底改变了我们与人工智能交互的方式。然而,要充分发挥这些模型的潜力,掌握提示工程(Prompt Engineering&am…...
终极华硕笔记本性能控制指南:GHelper让你的ROG笔记本飞起来
终极华硕笔记本性能控制指南:GHelper让你的ROG笔记本飞起来 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...
掌握开源电路板查看器实用技巧:从零开始的高效使用指南
掌握开源电路板查看器实用技巧:从零开始的高效使用指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView OpenBoardView是一款专业的开源电路板文件查看工具,专为电子工程师、硬件维修…...
