OkHttp GET 和 POST 的使用

2023-10-27

1 OkHttp 介绍

Android 系统主要提供两种方式来进行 HTTP 通信,HttpURLConnection 和 HttpClient,但是由于 HttpClient 的 API 数量过多,从 Android 2.3 及以后版本中,Google 推荐使用 HttpURLConnection。HttpURLConnection 是一种多用途、轻量极的 HTTP 客户端,使用它来进行 HTTP 操作可以适用于大多数的应用程序。虽然 HttpURLConnection 的 API 提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。但也正是因为这样,HttpURLConnection 的使用还是比较复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码,于是乎,一些Android 网络通信框架也就应运而生,今天要讲的就是 OkHttp 开源框架。OkHttp 可以做很多事,包括上传字符串、上传文件、上传流、上传表格参数、上传多部分的请求、响应 Json、响应缓存等。目前主要流行 Json 数据通信,所以我们主要讲基于 Json 通信的 GET 和 POST 请求与响应。

2 下载 OkHttp

  1. 下载 OkHttp 的 jar 包,可以去 GitHub 下载最近的包。

    这是最新下载地址:https://search.maven.org/remote_content?g=com.squareup.okhttp3&a=okhttp&v=LATEST 
    当然,你也可以在项目中直接添加编译(用于 Android Studio):compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    OkHttp 的项目地址:https://github.com/square/okhttp

  2. 还需要添加一个 OkHttp 的依赖包:okio.jar,下载地址:https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST 
    项目地址:https://github.com/square/okio 
    编译地址:compile 'com.squareup.okio:okio:1.6.0'

3 GET 请求

我们从最简单的 Http 请求开始学起,首先需要获取一个 OkHttpClient 对象,方法如下:

OkHttpClient mHttpClient = new OkHttpClient();

OkHttpClient 用于管理所有的请求,内部支持并发,所以我们不必每次请求都创建一个 OkHttpClient 对象,这是非常耗费资源的。接下来就是创建一个 Request 对象了,如下所示:

Request request = new Request.Builder()
    .url("http://www.baidu.com")
    .build();

下面实现从网络下载图片的完整代码:

public static void main(String[] args) throws IOException {
		//1, 导包
		//2, 得到OkHttp的客户端
		OkHttpClient client = new OkHttpClient();
		//3, 发起新的请求, 得到响应对象
		Request request = new Request.Builder()
							.url("https://www.baidu.com/img/2016_8_17chinabetter_dec3fa87715c772207eb75f292100578.png")
							.build();
		
		Response response = client.newCall(request).execute();
		if(response.isSuccessful())
		{
			//获取要访问资源的byte数组
			byte[] arr = response.body().bytes();
			FileOutputStream fos = new FileOutputStream("d:/bd.jpg");
			fos.write(arr);
			fos.close();
			System.out.println("图片下载成功!!!!!");
		}
	}

4 POST 请求

http 常用的请求分为 GET 和 POST 请求,刚才我们使用的明显是一个 GET 请求,那么,如何发起一个 POST 请求呢?其实很简单,在第二步中有一个 post 方法,就可以传入请求参数。

首先,创建一个 RequestBody 对象,这里我们用它的一个子类 FormBody 创建一个表单数据参数,如下所示:

//表单数据
FormBody.Builder builder = new FormBody.Builder();
builder.add("xwdoor","xwdoor");
RequestBody formBody = builder.build();
然后以此构建 Request 对象,如下所示:

Request request = new Request.Builder()

    .url("http:www.baidu.com")
    .post(formBody)
    .build();

调用 post() 方法,将创建的 RequestBody 对象传入即可。开始请求与前面讲的 GET 请求一样。实现 POST 请求大概分四步:
  1. 创建 OkHttpClient 对象
  2. 创建 RequestBody 对象
  3. 创建 Request 对象
  4. 将 Request 对象添加到 OkHttpClient 中,并传入回调函数。
完整实例:
public static void main(String[] args) throws IOException {	
		//1, 导包	
		//2, 的到客户端
		OkHttpClient client = new OkHttpClient();
		
		//3, 发起新的请求,获取返回信息
		RequestBody body = new FormBody.Builder()
							.add("useName", "abc")//添加键值对
							.add("usePwd", "321")
							.build();
		Request request = new Request.Builder()
							.url("http://localhost:8080/Day_28_Servlet/LoginServlet")
							.post(body)
							.build();
		Response response = client.newCall(request).execute();
		if(response.isSuccessful())
		{
			String str = response.body().string();
			System.out.println("服务器响应为: " + str);
		}
	}
参考:http://blog.csdn.net/xwdoor/article/details/51063673


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

OkHttp GET 和 POST 的使用 的相关文章

  • Java操作Excel文件

    创建一个Excel文件 public static void creatExcelFile String filepath Workbook wb new XSSFWorkbook try FileOutputStream fileOut
  • Calendar的使用

    Calendar Calendar是一个抽象类 构造器被protected修饰 需要通过getInstance 获取实例 public static void main String args Calendar instance Calen
  • 黑马程序员---从头开始,回忆JAVA基础之JAVA用十六进制表示浮点数的方法

    在二进制文件中 存储数据的格式为16进制 下面举例说明27 0f在二进制文件中怎么表示 float 共计32位 折合4字节 由最高到最低位分别是第31 30 29 0位 31位是符号位 1表示该数为负 0反之 30 23位 一共8位是指数位
  • Java学习笔记 --- 布尔类型

    一 布尔类型 1 布尔类型也叫boolean类型 boolean类型数据只允许取值true和false 无null public class Bool public static void main String args boolean
  • 剑指offer第二版面试题39:数组中出现次数超过一半的数字(java)

    题目描述 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例子说明 如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 分析思路1 基于Partition
  • JAVA中的while do-while循环以及for循环的深刻理解 入门 小白必看

    循环 循环 循环 循环的作用 提出问题为什么需要循环 解决问题循环的出现 while 前序 循环 while循环的语法与流程以及细节 do while 后序循环 do while循环的语法和流程 while和do while 之间的区别 f
  • 六、03【Java 多线程】之Java线程

    Java 创建线程的方式 Java创建线程有四种方式 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口 使用 Executors 工具类创建线程池 1 继承 Thread 类 创建一个类继承 Thread
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • 各种注释总结

    jsp注释 html注释
  • ubuntu 11配置hadoop

    最近没事 研究下ubuntu 配置hadoop ubuntu版本 64 bit 11 04 hadoop版本 hadoop1 2 1 一 在Ubuntu下创建hadoop用户组和用户 1 创建hadoop用户组 sudo addgroup
  • FastJson 之 List<Map>转化成对应List<Object>

    List
  • Java 泛型 T,E,K,V,?

    泛型带来的好处 在没有泛型的情况的下 通过对类型 Object 的引用来实现参数的 任意化 任意化 带来的缺点是要做显式的强制类型转换 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 对于强制类型转换错误的情况 编译器可能不提示
  • 求一个数组的最大值最小值及其下标

    求一个数组的最大值最小值及其下标 思路 假定一个数为最大值 如果有个数比假定的最大值还大 那么该数就为最大值 最小值同理 使用for循环 public class MaxMin public static void main String
  • JAVA--GUI(2)--布局

    布局 为了更好适应不同平台而引入的概念 Java的布局管理器是一个实现了LayoutManager接口的实例 用户无法设置setLocation 这些方法 如果想自己设置则需要取消布局管理器 采用布局管理器 边界布局 顺序布局 网格布局 卡
  • JDK介绍

    JDK JRE和JVM之间的关系 JVM是运行环境 JRE是含运行环境和相关的类库 跟node环境是一个意思 JDK目录介绍 目录名称 说明 bin 该路径下存放了JDK的各种工具命令 javac和java就放在这个目录 conf 该路径下
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • 将list集合的元素按照添加顺序的倒序进行排列取出

    将list集合的元素按照添加顺序的倒序进行排列取出 方法1 list add 0 object List
  • 如何做单元测试

    如何做单元测试 一 定义 二 为什么要做单元测试 三 单元测试用例 四 阿里单元测试规约 五 测试框架的使用 Junit 下面以Junit4 为例来介绍 1 1 什么是Junit 1 2 为何使用Junit 1 3 Junit的快速入门 导
  • mysql无法连接问题及其环境变量配置

    问题 Can t connect to MySQL server on localhost 3306 10061 方案一 不推荐 第一 在环境变量 系统变量的path中添加mysql的bin目录 我的是D mysql mysql 8 0 2
  • 详解toLowerCase(判断字符串相等)

    一 toLowerCase 函数简介 toLowerCase 是一个在多个编程语言中都存在的字符串方法 它的作用是将字符串中的所有大写字母转换为对应的小写字母 常用于文本处理 搜索和比较等情况 以确保字符串的一致性和非大小写敏感的操作 二

随机推荐

  • 在Windows上搭建Go开发环境

    Go语言是由谷歌开发的一个高性能 跨平台的编程语言 安装Go 首先先来安装一下Go语言的SDK 目前Go语言的最新版本为Go 1 8 3 Go下载页面列出了各种操作系统的安装包 如果选择Windows MSI安装包的话 会将Go安装到C G
  • 开源库源码分析:Okhttp源码分析(一)

    开源库源码分析 OkHttp源码分析 导言 接下来就要开始分析一些常用开源库的源码了 作为最常用的网络请求库 OkHttp以其强大的功能深受Android开发者的喜爱 比如说我 还有对该库进行二次封装而成的热门库 比如说Retrofit 本
  • Unity 如何实现音频播放后的回调

    using System using System Collections using System Collections Generic using UnityEngine public class soundManager MonoB
  • IDEA创建Maven项目报错- Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model】

    1 报错 今天下了最新版本的maven 在idea中配置好maven好 拉取依赖报错了 2 查看报错日志 报错如下 1 Error injecting constructor java lang NoSuchMethodError org
  • python代码编译反编译

    一 编译 自带模块py compile 可以把 py代码编译成pyc文件 py文件中导入使用 import py compile py compile compile r code01 py 在终端中运行 python m py compi
  • 常见问题记录

    执行数据迁移时报如下错误 sqlalchemy exc IntegrityError pymysql err IntegrityError 1215 Cannot add foreign key constraint 解决方案 创建外键的字
  • JavaMail 发送的邮件附件名乱码

    情景还原 同事收到系统发出的一封邮件 邮件里的附件名称本该是 模板 周汇报 2 docx却显示成了 UTF 8Q E3 80 90 UTF 8Q 2 docx 问题探究 第一反应是附件编码的问题 于是把 MimeMessageHelper
  • 静态链表

    代码来源 晴神 算法笔记 静态链表问题通用解题模板 定义静态链表 struct Node typename data int next XXX node size 使用静态链表时 结构体类型名和结构体变量名不要相同 初始化 XXX初始化为正
  • [Python人工智能] 三十二.Bert模型 (1)Keras-bert基本用法及预训练模型

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章结合文本挖掘介绍微博情感分类知识 包括数据预处理 机器学习和深度学习的情感分类 这篇文章将开启新的内容 Bert 首先介绍Keras bert库安装及基础
  • 新的RBAC:基于资源的权限管理(Resource-Based Access Control)

    新的RBAC 基于资源的权限管理 Resource Based Access Control 本文讨论以角色概念进行的权限管理策略及主要以基于角色的机制进行权限管理是远远不够的 同时将讨论一种更好的权限管理方式 What is a Role
  • python 模块和包

    一 模块 1 什么是模块 常见的场景 一个模块就是一个包含了python定义和声明的文件 文件名就是模块名字加上 py的后缀 但其实import加载的模块分为四个通用类别 1 使用python编写的代码 py文件 2 已被编译为共享库或DL
  • RocketMQ安装

    目录 1 安装配置jdk8 1 1将文件jdk 8u212 linux x64 tar gz上传到 root目录 1 2 解压缩jdk压缩文件 1 3 配置jdk环境变量 1 4验证jdk是否安装成功 2 安装RocketMQ 2 1下载r
  • nginx   client_body_buffer_size

    这里分享一个关于 nginx client body buffer size 参数的解决案例 描述 前端同事反馈 在发POST 请求带参数的时候 过Nginx 会报错 但是单台测试tomcat POST 很正常 看了下请求参数 好大一堆 的
  • [高级数据结构C++] 树状数组(求前缀和,区间和)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • vue项目实现鼠标移入显示表格,移出隐藏表格

    1 生成ul li列表 ul class ul list style margin bottom 10px li item planNm li ul 2 需要显示的表格 div style display none font size 14
  • mmdeploy快速上手

    mmdeploy快速上手 若要将使用 openmmlab 的框架 如mmdet mmcls 等训练的模型进行快速部署 同样来自 openmmlab 的 mmdeploy 无疑是最合适的选择 本文将简单地完成一个 Faster RCNN 模型
  • idea如何导入jar包

    通过添加Libraries的方式引入 1 首先在根目录下创建一个 libs 的目录 2 打开 File gt Project Structure 3 单击 Libraries gt gt Java gt 选择我们导入的项目主目录 点击OK
  • xxl-job远程命令执行漏洞复现

    目录 1 漏洞描述 2 靶场搭建 3 漏洞复现 反弹shell 1 漏洞描述 XXL JOB是一个分布式任务调度平台 其核心设计目标是开发迅速 学习简单 轻量级 易扩展 现已开放源代码并接入多家公司线上产品线 开箱即用 XXL JOB分为a
  • linux查看文件位置

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 查找文件 在linux中 我经常碰到一个问题 就是如何找到某个文件 有时可能是找
  • OkHttp GET 和 POST 的使用

    1 OkHttp 介绍 Android 系统主要提供两种方式来进行 HTTP 通信 HttpURLConnection 和 HttpClient 但是由于 HttpClient 的 API 数量过多 从 Android 2 3 及以后版本中