【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
OkHttp 系列文章目录
【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )
【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )
【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
文章目录
- OkHttp 系列文章目录
- 前言
- 一、OkHttp 异步 Get 请求
- 二、OkHttp 同步 Get 请求
- 三、OkHttp 同步 Post 请求
- 四、OkHttp 异步 Post 请求
- 五、完整源代码示例
- 六、博客资源
前言
在上一篇博客 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 ) 中简要介绍了 OkHttp 导入 , 以及同步 Get 请求 ;
一、OkHttp 异步 Get 请求
首先 , 创建 Request 请求对象 ;
// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.get() // 使用 Get 方法.build();
然后 , 创建异步回调事件 , 即请求完毕后的回调事件 ;
// 创建异步回调Callback callback = new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}};
最后 , 调用 enqueue 方法 , 进行异步 Get 请求操作 ;
// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(callback);
完整代码如下 :
/*** OkHttp 异步 Get 请求*/private void httpAsynchronousGet() {// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.get() // 使用 Get 方法.build();// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}});}
二、OkHttp 同步 Get 请求
参考 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 ) 三、OkHttp 同步 Get 请求 博客章节 ;
代码示例 : 先初始化 Request 对象 , 然后调用 mOkHttpClient.newCall(request).execute()
进行同步 Get 请求 , 注意同步请求必须在线程中执行 ;
/*** OkHttp 同步 Get 请求*/private void httpSynchronousGet() {// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.get() // 使用 Get 方法.build();// 同步 Get 请求new Thread(new Runnable() {@Overridepublic void run() {Response response = null;try {response = mOkHttpClient.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}String result = null;try {result = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "result : " + result);}}).start();}
三、OkHttp 同步 Post 请求
OkHttp 同步 Post 请求分为 333 个步骤 :
① 首先 , 创建 FormBody 对象 , 设置 Post 请求表单 ;
// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();
② 然后 , 创建 Request 请求对象 , 并传入 FormBody 表单 ;
// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post方法.build();
③ 最后 , 进行同步 Post 请求 , 注意要在线程中使用同步 Post 方法 ;
// 同步 Get 请求new Thread(new Runnable() {@Overridepublic void run() {Response response = null;try {response = mOkHttpClient.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}String result = null;try {result = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "result : " + result);}}).start();
完整代码示例 :
/*** OkHttp 同步 Post 请求*/private void httpSynchronousPost() {// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post 方法.build();// 同步 Get 请求new Thread(new Runnable() {@Overridepublic void run() {Response response = null;try {response = mOkHttpClient.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}String result = null;try {result = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "result : " + result);}}).start();}
四、OkHttp 异步 Post 请求
OkHttp 同步 Post 请求分为 444 个步骤 :
① 首先 , 创建 FormBody 对象 , 设置 Post 请求表单 ;
// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();
② 然后 , 创建 Request 请求对象 , 并传入 FormBody 表单 ;
// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post方法.build();
③ 在后 , 创建异步 Post 请求的回调方法 Callback 对象 ;
// 创建异步回调Callback callback = new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}};
④ 最后 , 进行同步 Post 请求 , 注意要在线程中使用同步 Post 方法 ;
// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(callback);
完整代码示例 :
/*** OkHttp 异步 Post 请求*/private void httpAsynchronousPost() {// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post 方法.build();// 创建异步回调Callback callback = new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}};// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(callback);}
五、完整源代码示例
package com.example.okhttp;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.Log;
import android.view.View;import com.example.okhttp.databinding.ActivityMainBinding;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";/*** ViewBinding 类* activity_main 布局映射出来的类* 该类主要作用是封装组件的获取*/ActivityMainBinding binding;/*** OkHttp 客户端* 注意 : 该类型对象较大, 尽量在应用中创建较少的该类型对象* 推荐使用单例*/OkHttpClient mOkHttpClient;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());mOkHttpClient = new OkHttpClient();binding.button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//httpSynchronousGet();//httpAsynchronousGet();//httpSynchronousPost();httpAsynchronousPost();}});}/*** OkHttp 同步 Get 请求*/private void httpSynchronousGet() {// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.get() // 使用 Get 方法.build();// 同步 Get 请求new Thread(new Runnable() {@Overridepublic void run() {Response response = null;try {response = mOkHttpClient.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}String result = null;try {result = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "result : " + result);}}).start();}/*** OkHttp 异步 Get 请求*/private void httpAsynchronousGet() {// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.get() // 使用 Get 方法.build();// 创建异步回调Callback callback = new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}};// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(callback);}/*** OkHttp 同步 Post 请求*/private void httpSynchronousPost() {// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post 方法.build();// 同步 Get 请求new Thread(new Runnable() {@Overridepublic void run() {Response response = null;try {response = mOkHttpClient.newCall(request).execute();} catch (IOException e) {e.printStackTrace();}String result = null;try {result = response.body().string();} catch (IOException e) {e.printStackTrace();}Log.i(TAG, "result : " + result);}}).start();}/*** OkHttp 异步 Post 请求*/private void httpAsynchronousPost() {// 创建 Post 表单 , 主要用于设置 Post 请求键值对FormBody formBody = new FormBody.Builder().add("Key", "Value").build();// Request 中封装了请求相关信息Request request = new Request.Builder().url("https://www.baidu.com") // 设置请求地址.post(formBody) // 使用 Post 方法.build();// 创建异步回调Callback callback = new Callback(){@Overridepublic void onFailure(Call call, IOException e) {// 请求失败的情况}@Overridepublic void onResponse(Call call, Response response) throws IOException {// 请求成功 , 获取String result = response.body().string();Log.i(TAG, "result : " + result);runOnUiThread(new Runnable() {@Overridepublic void run() {// 主线程中执行相关代码}});}};// 异步 Get 请求mOkHttpClient.newCall(request).enqueue(callback);}}
六、博客资源
GitHub : https://github.com/han1202012/OkHttp
【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )相关推荐
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- 微信小程序-异步请求变同步请求
不可行思路: 1.微信小程序是单向绑定,通过setData赋值,从而改变页面.我尝试过传递this到不同的js文件,然后setData,并没有卵用. 2.给异步请求的方法一个临时变量,在成功回调里面为 ...
- ajax异步详解同步请求,ajax async异步请求和同步请求
ajax async异步请求和同步请求 ajax是指异步加载.这个异步是相对于页面来说的,页面不刷新就加载服务器数据.ajax中的请求又分为同步请求和异步请求,这里是相对于进程来说的,ajax异步请求 ...
- java同步异步区别_同步请求和异步请求的区别
同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...
- python同时同步发送多个请求_python如何实现“发送一个请求,等待多个响应”的同步?...
我正在写一些代码通过串行口与单片机通信. MCU端基本上是一个请求/响应服务器. 一个或多个MCU发送我的请求. 然而,响应可以异步到达并且具有随机延迟,但是响应的顺序将保持不变. 另外,我的应用程序 ...
- retrofit 会请求两次_基于RxJava2+Retrofit2简单易用的网络请求实现
简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载 ...
- 为什么异步Python比同步Python快?
在本文中,我将继续使用 Web 应用程序作为例子,但还有其它类型的应用程序也从并发中获益.因此,这个讨论并不仅仅是针对 Web 应用程序的.你是否听人们说过,异步 Python 代码比"普通 ...
- 异步复位,同步释放的理解
什么情况下复位信号需要做异步复位同步释放处理 异步复位同步释放原理 利用前面两级触发器实现特点 问题1 如果没有前面两级触发器的处理异步信号直接驱动系统的触发器会出现什么情况 问题2 复位信号存在亚稳 ...
- 同时存多个变量缓存 微信小程序_微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解...
微信小程序 缓存 关于本地缓存 1.wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage( ...
- mysql异步查询 java_java 手写并发框架(一)异步查询转同步的 7 种实现方式
序言 本节将学习一下如何实现异步查询转同步的方式,共计介绍了 7 种常见的实现方式. 思维导图如下: 异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 比如业务开发中我们 ...
最新文章
- RHEL5+Postfix+MySql+IMAP+MailDrop+ExtMail(5)
- Sublime Text 3 、WebStorm配置实时刷新
- Python字典类型内部做判断赋值
- 用python画玫瑰花脚本-python画一个玫瑰和一个爱心
- UkrGuru.SqlJson——你的SQL Server和.NET 5之间的链接
- 手机影音第十三天,xutils3、Glide的使用获取网络图片;下拉、上滑刷新;缓存网络资源...
- 微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)
- HTTP协议和HTTPS协议
- STC学习:温度与光照传感器
- 将python项目部署到Docker
- 进销存excel_EXCEL进销存系统升级版,自动库存更新,利润毛利分析一键操作
- 如何在excel单元格中插入图片批注
- 会议安排问题(贪心算法)
- ucore开启虚拟存储器过程详解
- java-jacob操作word,往word中动态插入各种文件
- 无法下载eclipse || 下载eclipse被墙 的解决方案
- 手机 9006 端口 不断的闪掉
- 全网最佳优惠券使用算法
- Kafka完美解决:Error while executing topic command:Replication factor: 1 larger than available brokers:0
- glade工具安装及入门
热门文章
- 四招避免SEO优化过度
- 5. [mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)
- bzoj 3875: [Ahoi2014Jsoi2014]骑士游戏【dp+spfa】
- ExtJs 日期相加,Grid表格列可编辑
- 最小生成树之Kruskal算法
- Java程序员的日常—— Arrays工具类的使用
- poj 2449 A*求k短路
- js 函数定义三种方式
- 再探Javascript词法作用域
- ROS-3 : Catkin工作空间和ROS功能包