OkHttp网络请求框架

添加依赖

build.gradle 文件中添加 OkHttp 依赖:

dependencies {implementation("com.squareup.okhttp3:okhttp:4.10.0") 
}

使用OkHttp发起GET请求

同步请求

public class MainActivity extends AppCompatActivity {// Used to load the 'okhttptest' library on application startup.static {System.loadLibrary("okhttptest");}private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv = binding.sampleText;tv.setText(stringFromJNI());new Thread(new Runnable() {@Overridepublic void run() {// 创建 OkHttpClientOkHttpClient client = new OkHttpClient();// 创建 Request 对象Request request = new Request.Builder().url("https://www.httpbin.org/get")  // URL.build();// 同步请求try (Response response = client.newCall(request).execute()){if(response.isSuccessful()){String responseBody = response.body().string();  // 读取响应体Log.d("Response:",responseBody);// 在主线程中显示 ToastrunOnUiThread(new Runnable() {@Overridepublic void run() {// 显示 ToastToast.makeText(MainActivity.this, responseBody, Toast.LENGTH_SHORT).show();}});}else {Log.e("Request failed", String.valueOf(response.code()));}} catch (IOException e) {throw new RuntimeException(e);}}}).start();}public native String stringFromJNI();
}

在这里插入图片描述

异步请求

public class MainActivity extends AppCompatActivity {// Used to load the 'okhttptest' library on application startup.static {System.loadLibrary("okhttptest");}private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv = binding.sampleText;tv.setText(stringFromJNI());new Thread(new Runnable() {@Overridepublic void run() {// 创建 OkHttpClientOkHttpClient client = new OkHttpClient();// 创建 Request 对象Request request = new Request.Builder().url("https://www.httpbin.org/get")  // URL.build();// 同步请求client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {Log.e("Request failed: ",e.getMessage());}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {String ResponseBody = response.body().string();if (response.isSuccessful()){Log.e("Response: " ,ResponseBody);runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,ResponseBody,Toast.LENGTH_SHORT).show();}});}else {Log.e("Request failed:",String.valueOf(response.code()));}}});}}).start();}public native String stringFromJNI();
}

在这里插入图片描述

POST请求

  允许通过HTTP访问网络资源,Android 默认禁止应用使用非加密(HTTP)通信,以保护用户数据的安全。默认情况下,Android 9(API 级别 28)及更高版本需要通过 HTTPS 进行网络通信。
  通过修改AndroidManifest.xml文件来临时允许明文HTTP流量。

    <applicationandroid:usesCleartextTraffic="true"...</application>

发送请求

public class MainActivity extends AppCompatActivity {// Used to load the 'okhttptest' library on application startup.static {System.loadLibrary("okhttptest");}private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv = binding.sampleText;tv.setText(stringFromJNI());new Thread(new Runnable() {@Overridepublic void run() {// 创建 OkHttpClientOkHttpClient client = new OkHttpClient();RequestBody formBody = new FormBody.Builder().add("name","Bileton").add("age","21").build();// 创建 Request 对象Request request = new Request.Builder().url("http://www.httpbin.org/post")  // URL.post(formBody).build();// 同步请求client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {Log.e("Request failed: ",e.getMessage());}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {String ResponseBody = response.body().string();if (response.isSuccessful()){Log.e("Response: " ,ResponseBody);runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,ResponseBody,Toast.LENGTH_SHORT).show();}});}else {Log.e("Request failed:",String.valueOf(response.code()));}}});}}).start();}public native String stringFromJNI();
}

在这里插入图片描述

拦截器

  OkHttp 的拦截器是一个非常强大的工具,可以在请求和响应过程中拦截和修改 HTTP 请求和响应。拦截器可以用于日志记录、修改请求/响应、添加通用头部信息、缓存等功能。

OkHttp提供了两种类型的拦截器:

  • 应用拦截器(Application Interceptor)
    应用拦截器可以在请求被发送之前或响应到达客户端之后进行拦截。应用拦截器不会直接影响网络层操作。

    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {Request originalRequest = chain.request();// 添加头部信息Request modifiedRequest = originalRequest.newBuilder().header("Authorization", "Bearer your_token").build();// 继续链条中的下一个拦截器return chain.proceed(modifiedRequest);}}).build();
    
  • 网络拦截器(Network Interceptor)
    网络拦截器更接近网络层,能访问和修改在网络上传输的数据。它们可以用来实现诸如缓存和压缩的功能。

    OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {Request request = chain.request();// 打印请求信息long startTime = System.nanoTime();System.out.println(String.format("Sending request %s on %s%n%s",request.url(), chain.connection(), request.headers()));Response response = chain.proceed(request);// 打印响应信息long endTime = System.nanoTime();System.out.println(String.format("Received response for %s in %.1fms%n%s",response.request().url(), (endTime - startTime) / 1e6d, response.headers()));return response;}}).build();
    

在请求中使用拦截器

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new CustomInterceptor()) // 添加应用拦截器.addNetworkInterceptor(new CustomNetworkInterceptor()) // 添加网络拦截器.build();Request request = new Request.Builder().url("https://www.example.com").build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {System.out.println(response.body().string());}}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6821.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于sealos部署的集群部署dashboard

1、下载yaml文件进行部署 rootmaster-1:~# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml2、修改service的访问模式 rootmaster-1:~# vim recommended.yaml kind: Service apiVersion: v1 metadata:labels:k8s-app: kube…

手机贴膜气泡识别组件定位图像分割系统:快速图像识别

手机贴膜气泡识别组件定位图像分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-Parc&#xff06;yolov8-seg-KernelWarehouse等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge …

C语言 | Leetcode C语言题解之第538题把二叉搜索树转换为累加树

题目&#xff1a; 题解&#xff1a; struct TreeNode* getSuccessor(struct TreeNode* node) {struct TreeNode* succ node->right;while (succ->left ! NULL && succ->left ! node) {succ succ->left;}return succ; }struct TreeNode* convertBST(stru…

SQL--查询连续三天登录数据详解

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 20…

数据结构和算法-01背包问题01-认识01背包

0-1背包 什么是0-1背包问题&#xff1f; [0-1背包问题Knapsack Problem] 假设有一个背包&#xff0c;可承载的最大重量是W(kg)&#xff0c; 现在有n个物品&#xff0c;每个物品的重量不等&#xff0c; 并且不可分割。我们期待选择几件物品放入背包中&#xff0c;在不超过背包最…

go-carbon 和 gorm 优雅处理数据库日期时间

一、简介 (一) carbon carbon 是一个简单、语义化、开发人员友好的 golang 时间包。carbon 提供了丰富的日期和时间处理功能&#xff0c;使得日期和时间操作更加简单和直观。 (二) gorm gorm 是一个用于 Go 语言的 ORM&#xff08;对象关系映射&#xff09;框架。它提供了简…

Java 抽象类 详解

文章目录 一、概述1.1、什么是抽象类1.2、定义抽象类1.3、什么是抽象方法1.4、定义抽象方法 二、特点2.1、抽象类的特点2.1.1、抽象类不可以实例化对象2.1.2、抽象类必须要被继承2.1.3、抽象类的子类2.1.4、抽象类的成员 2.2、抽象方法的特点2.2.1、只能有方法声明&#xff0c;…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

SpringBoot Java教学工具:创新教育体验

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理教学辅助平台的相关信息成为必然。开发合适…

VisionPro —— CogIPOneImgeTool工具详解

CogIPOneImageTool工具主要用来对单张图像进行算法处理操作 CogIPOneImgeTool简介 CogIPOneImageTool 工具可完成高斯平滑、高通滤波和图像量化等基本图像处理操作。Image Processing One Image 工具编辑控件为此工具提供图形用户界面。 Image Processing Operations (图像处…

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…

推荐一款功能强大的FTP和云应用程序:FTPie Pro

FTPie Pro是一款集多种云存储和 FTP 客户端功能于一体的先进文件管理工具。通过支持Google Drive、Dropbox和OneDrive等主流云存储服务&#xff0c;用户可以在一个平台上高效管理文件。同时&#xff0c;它兼容 FTP、FTPS 和 SFTP 等多种文件传输协议&#xff0c;确保文件传输的…

playwright学习记录1

playwright 简介&#xff1a;Playwright 是由微软推出的一款用于 Web 应用自动化测试的开源框架&#xff0c;它支持多浏览器、多平台&#xff0c;具有强大的 API 和现代化的自动化功能&#xff0c;适用于跨浏览器的 UI 测试。Playwright 支持所有现代渲染引擎&#xff0c;包括…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 【…

数据结构进阶——AVL树

一、AVL树基本概念 1.1定义 如果一颗二叉搜索树的左右子树的高度差的绝对值不超过1&#xff08;1&#xff0c;0&#xff0c;-1&#xff09;&#xff0c;那么这颗二叉搜索树就叫AVL树。 1.2AVL树的性质 AVL树的左右子树也是一颗AVL树&#xff0c;二叉搜索树是一颗高度平衡的二叉…

Easyconnect官网下载安装使用教程

软件下载 打开官网https://www.sangfor.com/downloads&#xff1b; 选择自己熟悉的语言 windows选择支持与服务—软件下载 mac 找售后智能在线&#xff08;见下面MAC&#xff09; 在所有产品与服务中选择&#xff1a;SSL VPN 左侧选择SSL VPN工具&#xff0c;然后根据自…

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron )&#xff0c;又名感知机( Perceptron )&#xff0c;在模型结构上与 逻辑回归 一致&#xff0c;这里以一个二维输入量的例子对其进行进一步 的解释&#xff1a; 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

人工智能(AI)和机器学习(ML)技术学习流程

目录 人工智能(AI)和机器学习(ML)技术 自然语言处理(NLP): Word2Vec: Seq2Seq(Sequence-to-Sequence): Transformer: 范式、架构和自注意力: 多头注意力: 预训练、微调、提示工程和模型压缩: 上下文学习、思维链、全量微调、量化、剪枝: 思维树、思维…

Odoo:免费开源的医药流通行业信息化解决方案

文 / 开源智造Odoo亚太金牌服务 方案概述 开源智造Odoo免费开源ERP提供面向医药批发采、供、销业财一体化&#xff0c;及直接面向消费者的门店终端、全渠道管理、营销管理以及GSP合规管理解决方案&#xff0c;提升企业运营效率和全业务链条的数字化管控、追溯能力。 行业的最新…

牛客sql题目总结(1)

1.第N高的薪水 AC: create function getnthhighestsalary(n int) returns int begindeclare m int; set m n - 1; return (select distinct salaryfrom employeeorder by salary desclimit m, 1); end 2.平均播放进度大于60%的视频类别 AC&#xff1a; select tb_video_info…