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.mzph.cn/pingmian/60320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ue5 umg学习(三)文本控件

从通用中&#xff0c;选择文本控件 将其拉入画布中&#xff0c;和图像控件使用方法类似。 右边是字形&#xff0c;尺寸&#xff0c;字间距。 可以导入字形&#xff0c;使用&#xff0c;不过要注意&#xff0c;不要导入FZ系字体&#xff0c;不然可能会涉及侵权 修改尺寸会修…

wireshark演进之路——从GTK到Qt

Wireshark 自 1998 年诞生至今&#xff0c;已有超过26年的历史了。它最早由 Gerald Combs 创建&#xff0c;最初名为 Ethereal。2006 年&#xff0c;Ethereal 更名为 Wireshark&#xff0c;并继续发展成了全球领先且人尽皆知的网络协议分析工具&#xff0c;其GUI演变就是其中非…

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …

JavaWeb后端开发案例——苍穹外卖day01

day1遇到问题&#xff1a; 1.前端界面打不开&#xff0c;把nginx.conf文件中localhost:80改成81即可 2.前后端联调时&#xff0c;前端登录没反应&#xff0c;application.yml中默认用的8080端口被占用&#xff0c;就改用了8081端口&#xff0c;修改的时候需要改两个地方&…

Centos7镜像下载与docker安装

注意&#xff1a; CentOS 7 已于2024年6月30日停止维护&#xff01; 1、下载 由于 centos 7 已经停止维护&#xff0c;部分镜像网站移除了对centos 7的支持&#xff0c;这里找到了部分现在还可以使用的镜像网站 阿里云开源镜像站&#xff1a;https://mirrors.aliyun.com/cent…

科技云报到:数字化转型,从不确定性到确定性的关键路径

科技云报到原创。 数字化转型是VUCA时代最大的确定性。 如果说&#xff0c;过去是数字化转型的试验阶段&#xff0c;实施的是开荒动土、选种育苗&#xff0c;那么当前要进行的是精耕细作、植树造林&#xff0c;数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业…

AgentReview:基于 LLM Agents 模拟同行评审过程的框架

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

如何查看电脑关机时间

要查看电脑的关机时间&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 打开事件查看器&#xff1a;按下键盘上的Windows键R键&#xff0c;然后在弹出的运行对话框中输入"eventvwr.msc"&#xff0c;并按下Enter键。 2. 在事件查看器窗口中&#xff0c;单击左侧窗…

详解Gemini API的使用:在国内实现大模型对话与目标检测教程

摘要&#xff1a;本博客介绍了如何利用Gemini API实现多轮对话和图像目标检测识别功能&#xff0c;在Python中快速搭建自己的大模型完成实际任务。通过详细的步骤解析&#xff0c;介绍了如何申请Gemini API密钥&#xff0c;调用API、对话实现的代码&#xff0c;给出了上传图片识…

HashMap的put流程知道吗

HashMap 的 put 方法算是 HashMap 中比较核心的功能了&#xff0c;复杂程度高但是算法巧妙&#xff0c;同时在上一版本的基础之上优化了存储结构&#xff0c;从链表逐步进化成了红黑树&#xff0c;以满足存取性能上的需要。本文逐行分析了 put 方法的执行流程&#xff0c;重点放…

5. ARM_指令集

概述 分类 汇编中的符号&#xff1a; 指令&#xff1a;能够编译生成一条32位机器码&#xff0c;并且能被处理器识别和执行伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条指令伪操作&#xff1a;不会生成指令&#xff0c;只是在编译阶段告诉编译器怎…

uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用

文章目录 1、uniapp1.uview组件安装2.uview-plus组件安装 2、条件编译3、easycom规范1.组件路径符合规范2.自定义easycom配置的示例 总结 1、uniapp UniApp的UI组件库&#xff0c;如TMUI、uViewUI、FirstUI、TuniaoUI、ThorUI等&#xff0c;这些组件库适用于Vue3和TypeScript&…

Vue 学习随笔系列十四 -- JavaScript巧妙用法

JavaScript巧妙用法 文章目录 JavaScript巧妙用法1、String.padStart 函数2、String.padEnd 函数3、tirm 函数3. Object.freeze 函数4. Object.fromEntries 函数5. Object.entries 函数6. Array.prototype.flat 函数 1、String.padStart 函数 在字符串前面进行填充 let temp …

docker运行ActiveMQ-Artemis

前言 artemis跟以前的ActiveMQ不是一个产品&#xff0c;原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的&#xff0c;和原来不兼容&#xff0c;全称&#xff1a;ActiveMQ Artemis 本位仅介绍单机简单部署使用&#xff0c;仅用于学习和本地测试使用 官网&#xff1a;…

商场试衣间惊现隐藏摄像头:小澄检测仪助力博主影子揭露

在信息时代&#xff0c;隐私安全如同一座需要时刻守护的堡垒。然而&#xff0c;近期公共场所出现的针孔摄像头事件&#xff0c;让这座堡垒遭受了严峻冲击。科普博主影子不会说谎近日发布视频&#xff0c;再度曝光隐藏在商场服装店试衣间的针孔摄像头&#xff0c;引发公众关注。…

【MATLAB仿真】基于matlab的圆形阵列的波束形成进行仿真

摘要 本文研究了基于圆形阵列的波束形成技术&#xff0c;并利用MATLAB对其进行仿真分析。圆形阵列波束形成在现代无线通信、雷达和声学等领域具有广泛的应用&#xff0c;能够有效提高信号的方向性和抗干扰能力。本文通过改变阵列半径及入射角&#xff0c;对波束图进行了仿真分…

遗传算法与深度学习实战(23)——利用遗传算法优化深度学习模型

遗传算法与深度学习实战&#xff08;23&#xff09;——利用遗传算法优化深度学习模型 0. 前言1. 神经进化2. 使用遗传算法作为深度学习优化器小结系列链接 0. 前言 神经进化涵盖了所有用于改进深度学习的进化算法。更具体地说&#xff0c;神经进化用来定义应用于深度学习的特…

AG32 FPGA部分简单开发

环境 Quartus 13.0&#xff08;Quartus 不能使用Lite 版本&#xff0c;需要使用Full 版本&#xff09;AGM SDKSupra&#xff08;快捷方式在SDK目录下&#xff0c;具体路径为AgRV_pio\packages\tool-agrv_logic\bin&#xff09; FPGA编程 在AG32芯片中&#xff0c;拥有异构双…

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

hive修改表名、修改列名、修改分区

文章目录 一、修改表二、修改列三、修改分区 官网地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-AlteringandDroppingTables 一、修改表 1、重命名表名 ALTER TABLE table_name RENAME TO new_table_name示例: 将user表…