OkHttp的使用之{RequestBody、FormBody,【一步教学,一步到位</h1> </div> <div class="article-info-box"> <d

OkHttp的使用之{RequestBody、FormBody,【一步教学,一步到位


1.4、图片下载,文件下载


0、相关文章

======

OkHttp的初步使用(get、post之{RequestBody、FormBody、MultipartBody})(阅读量4w,40赞)

1、POST请求

========

主要来讲一下post请求,post方式中的Request需要传递一个RequestBody作为post的参数。RequestBody有两个子类:FormBody和MultipartBody

1.1、RequestBody–json数据提交


public static final MediaType JSON = MediaType.parse(“application/json; charset=utf-8”);

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {

RequestBody body = RequestBody.create(JSON, json);

Request request = new Request.Builder()

.url(url)

.post(body)

.build();

//同步

Response response = client.newCall(request).execute();

f (response.isSuccessful()) {

return response.body().string();

} else {

throw new IOException("Unexpected code " + response);

}

}

1.2、FromBody—表单提交 这种能满足大部分的需求


romBody用于提交表单键值对,key-value,其作用类似于HTML中的标记。比如username=“LHX”,age="21"等类似的键值对。

我们可以使用HashMap<String,String>这样的数据结构来存储接口所需参数的键值对,它的查找速度为O(1),很快,但是对于API接口参数来说,数据不会太多,查找快体现不出优势来,并且HashMap比较耗费内存。以下是使用hashmap的例子:

private void fetchDataByPost() {

//把参数传进Map中

HashMap<String,String> paramsMap=new HashMap<>();

paramsMap.put(“name”,“哈哈”);

paramsMap.put(“client”,“Android”);

paramsMap.put(“id”,“3243598”);

FormBody.Builder builder = new FormBody.Builder();

for (String key : paramsMap.keySet()) {

//追加表单信息

builder.add(key, paramsMap.get(key));

}

OkHttpClient okHttpClient=new OkHttpClient();

RequestBody formBody=builder.build();

Request request=new Request.Builder().url(netUrl).post(formBody).build();

Call call=okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

//请求失败的处理

}

@Override

public void onResponse(Call call, Response response) throws IOException {

}

});

}

所以我们还有一种方式可以装取键值对,通过ArrayList这样的数据结构。

//首先要有一个RequestParameter类

public class RequestParameter implements Serializable {

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

private String name;

private String value;

public RequestParameter(String name,String value){

this.name=name;

this.value=value;

}

}

List parameter=new ArrayList<>();

RequestParameter rp1=new RequestParameter(“name”,“哈哈”);

parameter.add(rp1);

RequestParameter rp2=new RequestParameter(“client”,“Android”);

parameter.add(rp2);

//创建一个FormBody.Builder

FormBody.Builder builder=new FormBody.Builder();

if (parameter!=null&&parameter.size()>0){

for (final RequestParameter p : parameter) {

builder.add(p.getName(),p.getValue());

}

}

RequestBody formBody=builder.build();

OkHttpClient okHttpClient=new OkHttpClient();

Request request=new Request.Builder().url(netUrl).post(formBody).build();

Call call=okHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

//请求失败的处理

}

@Override

public void onRes

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

ponse(Call call, Response response) throws IOException {

}

});

1.3、MultipartBody—文件上传

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OkHttp的使用之{RequestBody、FormBody,【一步教学,一步到位

  • 类中的int是存储在栈上还是堆上? [复制]

    这个问题在这里已经有答案了 可能的重复 栈和堆理解问题 https stackoverflow com questions 2559271 stack heap understanding question 有人告诉我使用 var 真的很慢
  • 为什么没有成员变量的C++类会占用空间?

    我发现 MSVC 和 GCC 编译器都为每个类实例分配至少一个字节 即使该类是没有成员变量 或只有静态成员变量 的谓词 下面的代码说明了这一点 include
  • Android 调用另一个类的方法

    我知道这个问题重复了 但我在互联网上找不到答案 我想调用另一个类的方法 我有Class1和Class2 在第2类中我有这个方法 public void UpdateEmployee some code 我想从Class1调用上面的方法 感谢
  • Python:使用虚拟类来传递变量名称?

    这是后续返回一个字典的函数 其键是输入参数的名称 https stackoverflow com questions 9586305 python function that returns a dict whose keys are th
  • 使用 Retrofit 2.0.x 进行 HTTP 缓存

    我正在尝试使用 Retrofit 2 0 在我的应用程序中缓存一些响应 但我遗漏了一些内容 我安装了一个缓存文件 如下 private static File httpCacheDir private static Cache cache
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • 在python中访问包含matlab类的.mat文件

    我有一个从 matlab 2012b 生成的 mat 文件 它包含一个带有用户定义的 matlab 类的变量 在 python 3 3 中使用 scipy io loadmat 加载文件时 我得到以下信息 mat scipy io load
  • Retrofit 是否在主线程上进行网络调用?

    我正在尝试在 Android 上探索 Retrofit OkHttp 这是我在网上找到的一些代码 RestAdapter restAdapter new RestAdapter Builder setExecutors executor e
  • 为什么 Swift 中委托方法需要公开?

    我正在快速开发一个框架 我正在创建一个处理框架中 BLE 内容的类 这个类应该是公共的 因为我需要从使用我的框架的外部应用程序访问这个类 我的班级结构如下 public class MyClass NSObject CBCentralMan
  • 尝试在类中定义静态常量变量

    我正在定义一个变量adc cmd 9 as a static const unsigned char在我的课堂上ADC私人之下 由于它是一个常量 我想我只需在它自己的类中定义它 但这显然不起作用 pragma once class ADC
  • 作为属性的自定义类的数组

    我试图使用自定义类的数组作为我的组件的属性 但问题是这些值没有保存到组件中 这意味着如果我设置值 保存所有内容并再次打开项目 组件的值消失 我的代码如下所示 unit Unit1 interface uses Windows ExtCtrl
  • jQuery - 选择同一级别的div

    我想在单击按钮时选择一个特定的div 唯一的问题是 它必须是buttonClicked的父div的div 示例 div class container div class box h2 Langtidsparkering h2 div cl
  • 作为实例方法调用时行为不同的类方法?

    我想知道是否可以创建一个在作为类方法调用时与作为实例方法调用时表现不同的方法 例如 作为一个技能提高项目 我正在写一个Matrix类 是的 我知道已经有非常好的矩阵类 我为它创建了一个类方法 名为identity它返回指定大小的单位矩阵 现
  • 如何在 Windows 上使用 Pyreverse

    我想使用pyreverse 创建图表类 我下载它 当我使用这个命令时 pyreverse bat c PyreverseCommand a1 s1 f ALL o png test py 我收到错误 名称 点 无法识别 什么是 点 如何创建
  • tkinter 应用程序中的 super()

    我无法理解这个错误 在下面的代码中 当我使用tk Frame一切都按预期进行 但是如果我使用super 我被抛出了AttributeError 应用程序对象没有属性 tk class Application tk Frame def ini
  • 为什么我不能将一个类划分为多个文件

    我正在尝试创建一个类TestClass它分为几个文件 我将它分成 3 个文件 其中第一个文件TestClassPart1 php已经开始上课了class TestClass 和最后一个文件TestClassPart3 php有班级的右括号
  • 类运算符

    我在编写代码时遇到问题 void main Matrix c rows cols rows cols are int numbers c 0 0 2 the line that I m having a problem to do the
  • Haskell 中的异构多态性(正确方法)

    让一个模块来抽象Area操作 错误的定义 class Area someShapeType where area someShapeType gt Float module utilities sumAreas Area someShape
  • 改造中的 SocketTimeoutException

    我在尝试着POST向服务器请求获取数据但有时会发生SocketTimeoutException I used Ok3Client解决它 但我面临同样的异常 我该如何解决它 我的代码如下 public void getNormalLogin
  • 在 Delphi XE 中将类作为过程的参数传递

    我需要做的是这样的 procedure A type of form var form TForm begin form type of form Create application form showmodal freeandnil f

随机推荐

  • Spring框架介绍和使用

    一 Spring框架介绍 1 Spring简介 Spring是2003年兴起的一个Java轻量级框架 xff0c 它是为解决企业级开发的复杂性而创建的一个框架 它是一个分层的JavaSE EE Full Stack xff08 一站式 xf
  • SpringMVC注解开发运行原理

    服务器初始化过程 xff1a 1 xff1a 服务器初始化 加载继承 AbstractDispatcherServletInitializer即springmvc定义的代替web xml的 类初始化web容器 然后重写三个方法 xff1a
  • Unity3d游戏开发之C#开发(一)

    概要 撰写原因 xff1a 当今市面上关于Unity的教程的脚本几乎都是用js来当做教程语言的 xff0c 因为js比较容易学习 xff0c 所以如果是新学的朋友建议学js的版本 xff0c 如有特殊要求需要学习C 写脚本的话那么这系列文章
  • Spring配置文件详解

    Spring配置文件详解 1 spring的配置文件详解 Bean标签基本配置 用于配置对象让 spring 来创建的 默认情况下它调用的是类中的无参构造函数 如果没有无参构造函数则不能创建成功 属性 xff1a id 给对象在容器之中提供
  • [WinError 10061] 由于目标计算机积极拒绝,无法连接。解决办法

    相信来到这的人一定遇到这样的情况 xff0c 十分的难受 这里给大家总结了三种方法 xff0c 看看能不能解决大家的困难 1 代理问题 大家看看自己是不是因为正在搞东西 xff0c 列如 xff1a burpsuite xff0c 设置了代
  • 快速解决eclipse无法启动,一启动就报错,且整个项目显示红色感叹号和×

    eclipse中由于没有适配的server xff0c 所以需要用Tomcat来支持项目的运行 xff0c 也会出现各种各样的错误 xff0c 比如eclipse无法启动 xff0c 整个项目显示红色 xff01 和红色 该如何解决 xff
  • un7.10:在IDEA中使用若依框架实现增删改查功能。

    在java的世界中 xff0c 有很多框架提供我们使用 xff0c 今天我们就来讲一讲若依框架 若依框架是一款非常便捷的框架 xff0c 他相对于spring boot框架而言 xff0c 显得更为简单 xff0c 更为便捷 xff0c 比
  • docker常用操作命令。

    docker是一款基于Linux之上的容器 xff0c 由于它的抽象层比虚拟机少 xff0c 而且利用的是主机内流 xff0c 不需要价值操作系统的内核 xff0c 所以它比传统的虚拟机更快 xff0c 所以越来越多的人选择用docker了
  • un8.21:用html实现增删改查功能(代码篇)。

    在项目中 xff0c 我们不仅要在后端代码实现增删改查的功能 xff0c 前端也是必不可少的 xff0c 那么在前端页面中应该如何实现完整的一套增删该查呢 xff1f 接下来附上代码 xff0c 之后的文章里会有详解 一 在html中写出大
  • 达梦(DM)数据库介绍。

    达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统 简称DM 达梦数据库也属于关系型数据库 xff0c 主要有以下几个概念 数据库 实例 用户 表空间 模式 表 角色 数据文件 DM8采用全新的体系架构 xff0c
  • @TableId注解详细介绍

    64 TableId注解是专门用在主键上的注解 xff0c 如果数据库中的主键字段名和实体中的属性名 xff0c 不一样且不是驼峰之类的对应关系 xff0c 可以在实体中表示主键的属性上加 64 Tableid注解 xff0c 并指定 64
  • mybatis-plus自动填充功能

    有些时候我们可能会有这样的需求 xff0c 插入或者更新数据时 xff0c 希望有些字段可以自动填充数据 xff0c 比如密码 version等 在MP中提供了这样的功能 xff0c 可以实现自动填充 一 添加 64 TableField注
  • mybatis-plus之逻辑删除及通用枚举

    开发系统时 xff0c 有时候在实现功能时 xff0c 删除操作需要实现逻辑删除 xff0c 所谓逻辑删除就是将数据标记为删除 xff0c 而并非真正的物理删除 xff08 非delete操作 xff09 xff0c 查询时需要携带状态条件
  • MATLAB R2014b 的安装破解

    注 xff1a 本博文纯供技术学习之用 xff0c 无意侵权 xff0c 请不要传播转载并在破解24小时之内删除 提要 xff1a 因为考虑到数学建模和日常的数学学习只用安装的matlab xff0c 现在我了解的最新的应该就是matlab
  • 解决Field ‘name‘ doesn‘t have a default value报错

    今天写代码的时候报错Field 39 name 39 doesn 39 t have a default value xff0c 如下图 xff1a 是数据库属性字段没有赋初值 xff0c 然后我就去看数据库 xff0c 发现数据库 先说解
  • 仿macos风格的windows11桌面(适用win10,win11,齐全模板与配件,及相关问题解决方案)

    仿macos风格的windows11桌面在一定程度上加大了对win11的美化同时在原有的操作风格上对win11也进行了风格上的统一 xff0c 废话不多说 xff0c 先上效果图 是不是一眼就有所心动呢 xff0c 先介绍一下这个桌面上真正
  • retina屏是什么意思(Retina屏和一般显示屏幕的区别)

    可能许多比较关注电脑方面的信息或者有关于苹果的消息的小伙伴们都听说过 34 Retina 34 这个词 苹果手机 xff0c Retina视网膜屏幕 xff0c 是指人眼在正常观察距离下 xff0c 视网膜无法区分单个像素 xff0c 不再
  • 新员工-产品经理如何上手一个新产品,进行产品规划并开始工作

    产品规划 nbsp nbsp nbsp 是指产品规划人员通过调查研究 在研究市场 探寻客户 消费者需求 分析竞争对手 衡量外在机会与风险 以及对市场和技术发展态势综合研究的基础上 根据公司自身的情况和发展方向 制定出可以把握市场机会 满足消
  • Lottie动画资源放到服务器预下载,2021年Android开发突破20k有哪些有效的路径

    资源打包成zip文件放到了服务器上 xff0c 所以下载下来要解压缩 LottieAnimationUtils unZip download file parentPath downloadCount true override fun o
  • OkHttp的使用之{RequestBody、FormBody,【一步教学,一步到位