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

关于HashMap与OkHttp的使用

写了一个okhttp的post请求方法,添加参数很麻烦,需要封装:

//post请求public static void sendOkHttpRequestPost(String address , Callback callback) {OkHttpClient client = new OkHttpClient();// 创建表单参数RequestBodyRequestBody formBody = new FormBody.Builder()//.add("mac", "6C:8A:EC:03:FB:84")//.add("orderNum", "ZCS4228")//.add("model", "KK.RV22.801NT").add("mac", "02:00:00:00:00:00").build();// 创建POST请求Request request = new Request.Builder().url(address).post(formBody).build();// 发送异步请求client.newCall(request).enqueue(callback);}

可以用HashMap去填请求参数像这样:

 public static void sendOkHttpPost(String url, HashMap<String, String> params, Callback callback){OkHttpClient client = new OkHttpClient();FormBody.Builder builder = new FormBody.Builder();for (String key : params.keySet()) {builder.add(key, params.get(key));}RequestBody requestBody = builder.build();Request request = new Request.Builder().url(url).post(requestBody).build();client.newCall(request).enqueue(callback);}

这样就封装好了一个方法,在每次调用的时候就可以直接把参数写到hashmap里了,方便很多:

HashMap<String, String> params = new HashMap<>();params.put("mac", "02:00:00:00:00:00");OkHttpUtil.sendOkHttpPost(url1, params, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.d(TAG, "测试.......网络请求shibai.........." +e);}@Overridepublic void onResponse(Call call, Response response) throws IOException {Log.d(TAG, "测试.......网络请求成功.........." + response.body().string());}});

HashMap的一些说明:

HashMap是Java中一种非常常用的数据结构,用于将键映射到值。在HTTP请求中,我们可以使用HashMap将请求参数封装为键值对的形式,方便地进行POST或GET请求。

一段示例:

HashMap<String, String> params = new HashMap<>();
params.put("username", "user123");
params.put("password", "password123");MyOkHttpClient httpClient = new MyOkHttpClient();
httpClient.doPost("http://example.com/login", params, new Callback() {@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的处理逻辑}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功的处理逻辑}
});

在这个示例中,我们首先创建了一个HashMap对象params,并使用put方法向其中添加了两个键值对,分别表示用户名和密码。然后,我们实例化了MyOkHttpClient类,并调用了doPost方法,将请求参数和回调函数传递给了该方法。在这个示例中,我们使用了POST方法发送请求,并将参数封装为FormBody类型的请求体。
需要注意的是,键值对中的键和值应该与API的接口要求一致。此外,如果键值对中的值含有特殊字符,如空格、&、=等,需要进行URL编码处理。

keySet()方法
keySet()方法是Java中HashMap类的一个方法,用于获取HashMap中所有键的集合。该方法返回一个Set对象,其中包含了HashMap中所有键的集合。

下面是一个使用HashMap的keySet()方法的示例代码:

HashMap<String, String> params = new HashMap<>();
params.put("username", "user123");
params.put("password", "password123");for (String key : params.keySet()) {System.out.println("Key: " + key + ", Value: " + params.get(key));
}

在这个示例中,我们首先创建了一个HashMap对象params,并使用put方法向其中添加了两个键值对,分别表示用户名和密码。然后,我们使用keySet()方法获取了params中所有键的集合,并通过for循环遍历该集合。在每次循环中,我们使用get方法获取了对应键的值,并输出了键和值的信息。
需要注意的是,在使用keySet()方法遍历HashMap时,键的顺序是不固定的,因为HashMap并不保证键的顺序。如果需要按照键的顺序遍历HashMap,可以使用LinkedHashMap,它可以保证键的顺序与添加顺序相同。

扩充
HashMap并不保证键值对的顺序,因此使用keySet()方法遍历HashMap时,键的顺序是不确定的。如果需要按照键的顺序遍历HashMap,可以使用LinkedHashMap,它可以保证键的顺序与添加顺序相同。

下面是一个使用LinkedHashMap遍历HashMap的示例代码:

LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");for (String key : map.keySet()) {String value = map.get(key);System.out.println(key + " = " + value);
}

在这个示例中,我们首先创建了一个LinkedHashMap对象map,并使用put方法向其中添加了三个键值对,分别表示字母和它的大写形式。然后,我们使用keySet()方法获取了map中所有键的集合,并通过for循环遍历该集合。在每次循环中,我们使用get方法获取了对应键的值,并输出了键和值的信息。

需要注意的是,LinkedHashMap保证键值对的顺序与添加顺序相同,因此遍历时的顺序就是添加时的顺序。如果需要按照值的顺序遍历HashMap,可以使用values()方法获取所有值的集合,并进行排序后遍历。

相关文章:

关于HashMap与OkHttp的使用

写了一个okhttp的post请求方法&#xff0c;添加参数很麻烦&#xff0c;需要封装&#xff1a; //post请求public static void sendOkHttpRequestPost(String address , Callback callback) {OkHttpClient client new OkHttpClient();// 创建表单参数RequestBodyRequestBody fo…...

华为OD机试 - 单词倒序(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:单词倒序…...

搭建Samba服务器

搭建Samba服务器 文章目录搭建Samba服务器samba安装安装命令配置-ubuntu侧为samba服务器创建一个共享目录share创建使用该共享文件夹的账号修改samba服务器配置文件重启samba服务windows创建映射1.点击映射网络驱动器2.输入Ubuntu中的ip地址及其用户信息3.输入用户信息及其密码…...

Matlab进阶绘图第5期—风玫瑰图(WindRose)

风玫瑰图(Wind rose diagram)是一种特殊的极坐标堆叠图/统计直方图&#xff0c;其能够直观地表示某个地区一段时期内风向、风速的发生频率。 风玫瑰图在建筑规划、环保、风力发电、消防、石油站设计、海洋气候分析等领域都有重要作用&#xff0c;所以在一些顶级期刊中也能够看…...

【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的

系列文章目录 【SQL开发实战技巧】系列&#xff08;一&#xff09;:关于SQL不得不说的那些事 【SQL开发实战技巧】系列&#xff08;二&#xff09;&#xff1a;简单单表查询 【SQL开发实战技巧】系列&#xff08;三&#xff09;&#xff1a;SQL排序的那些事 【SQL开发实战技巧…...

XILINX AXI总线学习

AXI介绍什么是AXI&#xff1f;AXI&#xff08;高级可扩展接口&#xff09;&#xff0c;是ARM AMBA的一部分&#xff1b;AMBA:高级微控制器总线架构&#xff1b;是1996年首次引入的一组微控制器总线&#xff1b;开放的片内互联的总线标准&#xff0c;能在多主机设计中实现多个控…...

2022CCPC女生赛(补题)(A,C,E,G,H,I)

迟了好久的补题&#xff0c;&#xff0c;现在真想把当时赛时的我拉出来捶一拳排序大致按照题目难度。C. 测量学思路&#xff1a;直接循环遍历判断即可&#xff0c;注意角度要和2π取个最小值。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int…...

【Nginx】Nginx的安装配置

环境说明系统&#xff1a;Centos 7一、编译安装Nginx官网下载地址nginx: download#安装依赖 [rootnginx nginx-1.22.1]# yum install gcc pcre pcre-devel zlib zlib-devel -y #从官网下载Nginx安装包&#xff0c;并进行解压、编译、安装 [rootnginx ~]# wget https://nginx.or…...

数学小课堂:统计时有效地筛选数据

文章目录引言I 被爆冷门的原因II 统计时有效地筛选数据2.1 统计数据的常见问题2.2 大数据的特征2.3 有效筛选数据的原则引言 在博弈论中很多结果有发生的概率&#xff0c;而概率这件事只是估计出来的&#xff0c;并不准确。因此&#xff0c;一旦加入博弈的选手多了之后&#x…...

MySQL安装优化

hello&#xff0c;大家好&#xff0c;我是小鱼 本文主要通过针对 MySQL Server&#xff08;mysqld&#xff09;相关实现机制的分析&#xff0c;得到一些相应的优化建议。主要 涉及 MySQL 的安装以及相关参数设置的优化&#xff0c;但不包括 mysqld 之外的比如存储引擎相关的参…...

RocketMQ系列开篇

RocketMQ系列开篇 今天开始学习RocketMQ相关系列源码。我会带着自己的目的去学习源码。所以不会像一般的技术博客一样&#xff0c;写一个完整的流程&#xff0c;介绍每一步干了啥。而是提出一个问题&#xff0c;然后去看代码里面是怎么实现的。说明一下&#xff0c;本次系列我…...

logback无法删除太久远的日志文件?logback删除日志文件源码分析

logback无法删除太久远的日志文件&#xff1f;logback删除日志文件源码分析 最近发现logback配置滚动日志&#xff0c;但是本地日志文件甚至还有2年前的日志文件&#xff0c;服务器是却是正常的&#xff01; 网上搜索了一波没有发现&#xff0c;只找到说不能删除太久远的旧日志…...

【MyBatis-Plus】基于@Version注解的乐观锁实现

引入mybatis-plus依赖&#xff0c;注意这里的版本要求 since 3.4.0&#xff1b;&#xff08;3.4.1,3.4.2已测&#xff09; 3.2.0肯定是不支持的&#xff0c;无法引入MybatisPlusInterceptor&#xff1b; 乐观锁 当要更新一条记录的时候&#xff0c;希望这条记录没有被别人更新…...

ubuntu20.04搭建detectron2环境

Ubuntu22.04安装Cuda11.3 Linux下驱动安装 # 以下命令按顺序执行 sudo apt update && sudo apt upgrade -y # or sudo apt update # 查看显卡信息 ubuntu-drivers devices sudo ubuntu-drivers autoinstall # or sudo apt install nvidia-driver-510 reboot nvidia-s…...

Navicate远程连接Linux上docker安装的MySQL容器

Navicate远程连接Linux上docker安装的MySQL容器失败 来自&#xff1a;https://bluebeastmight.github.io/ 问题描述&#xff1a;windows端的navicat远程连接不上Linux上docker安装的mysql&#xff08;5.7版本&#xff09;容器&#xff0c;错误代码10060 标注&#xff1a; 1、…...

基于Jetson NX的模型部署

系统安装 系统安装过程分为3步&#xff1a; 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https://developer.nvidia.com/jetson-nano-sd-card-image Windows版SD存储卡格式化程序 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 镜像烧录工具…...

【PaddlePaddle onnx】PaddlePaddle导出ONNX及模型可视化教程

文章目录1 背景介绍2 实验环境3 paddle.onnx.export函数简介4 代码实操4.1 PaddlePaddle与ONNX模型导出4.2 ONNX正确性验证4.3 PaddlePaddle与ONNX的一致性检查4.4 多输入的情况5 ONNX模型可视化6 ir_version和opset_version修改7 致谢原文来自于地平线开发者社区&#xff0c;未…...

虹科案例 | 如何可持续的对变压器进行温度监控?

为了延长变压器的使用寿命&#xff0c;需要一个测量系统来监测内部整个绕组区域的温度。它必须明确温度升高发生的位置及其强度。您可以在此处了解为什么会这样以及如何在实践中实施? PART 1 变压器多点测温问题 变压器的工作温度越高&#xff0c;使用寿命越短。这里主要存在…...

Go之入门(特性、变量、常量、数据类型)

一、Go语言特性 语法简单并发性。Go语言引入了协程goroutine&#xff0c;实现了并发编程内存分配。Go语言为了解决高并发下内存的分配和管理&#xff0c;选择了tcmalloc进行内存分配&#xff08;为了并发设计的高性能内存分配组件&#xff0c;使用cache为当前线程提供无锁分配…...

第九届省赛——8等腰三角形(找规律)

题目&#xff1a;本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是&#xff1a;1. 先用1,2,3&#xff0c;...的自然数拼一个足够长的串2. 用这个串填充三角形的三条边。从上方顶点开始&#xff0c;逆时针填充。比如&#xff0c;当三角形高度是8时&#xff1a…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...