当前位置: 首页 > news >正文

Android 一个改善的okHttp封装库

  • Android Studio

使用前,对于Android Studio的用户,可以选择添加:

compile project(‘:okhttputils’)

或者

compile ‘com.zhy:okhttputils:2.0.0’

  • Eclipse

自行copy源码。

二、基本用法


目前基本的用法格式为:

OkHttpUtils

.get()

.url(url)

.addParams(“username”, “hyman”)

.addParams(“password”, “123”)

.build()

.execute(callback);

通过链式去根据自己的需要添加各种参数,最后调用execute(callback)进行执行,传入callback则代表是异步。如果单纯的execute()则代表同步的方法调用。

可以看到,取消了之前一堆的get重载方法,参数也可以进行灵活的选择了。

下面简单看一下,全部的用法:

(1)GET请求

String url = “http://www.csdn.net/”;

OkHttpUtils

.get()

.url(url)

.addParams(“username”, “hyman”)

.addParams(“password”, “123”)

.build()

.execute(new StringCallback()

{

@Override

public void onError(Request request, Exception e)

{

}

@Override

public void onResponse(String response)

{

}

});

(2)POST请求

OkHttpUtils

.post()

.url(url)

.addParams(“username”, “hyman”)

.addParams(“password”, “123”)

.build()

.execute(callback);

(3)Post String

OkHttpUtils

.postString()

.url(url)

.content(new Gson().toJson(new User(“zhy”, “123”)))

.build()

.execute(new MyStringCallback());

将string作为请求体传入到服务端,例如json字符串。

(4)Post File

OkHttpUtils

.postFile()

.url(url)

.file(file)

.build()

.execute(new MyStringCallback());

将file作为请求体传入到服务端.

(5)基于POST的文件上传(类似web上的表单)

OkHttpUtils.post()//

.addFile(“mFile”, “messenger_01.png”, file)//

.addFile(“mFile”, “test1.txt”, file2)//

.url(url)

.params
(params)//

.headers(headers)//

.build()//

.execute(new MyStringCallback());

(6)下载文件

OkHttpUtils//

.get()//

.url(url)//

.build()//

.execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), “gson-2.2.1.jar”)//

{

@Override

public void inProgress(float progress)

{

mProgressBar.setProgress((int) (100 * progress));

}

@Override

public void onError(Request request, Exception e)

{

Log.e(TAG, “onError :” + e.getMessage());

}

@Override

public void onResponse(File file)

{

Log.e(TAG, “onResponse :” + file.getAbsolutePath());

}

});

(7)显示图片

OkHttpUtils

.get()//

.url(url)//

.build()//

.execute(new BitmapCallback()

{

@Override

public void onError(Request request, Exception e)

{

mTv.setText(“onError:” + e.getMessage());

}

@Override

public void onResponse(Bitmap bitmap)

{

mImageView.setImageBitmap(bitmap);

}

});

哈,目前来看,清晰多了。

三、对于上传下载的回调


new Callback<?>()

{

//…

@Override

public void inProgress(float progress)

{

//use progress: 0 ~ 1

}

}

对于传入的callback有个inProgress方法,需要拿到进度直接复写该方法即可。

四、对于自动解析为实体类


目前去除了Gson的依赖,提供了自定义Callback的方式,让用户自己去解析返回的数据,目前提供了StringCallbackFileCallback,BitmapCallback 分别用于返回string,文件下载,加载图片。

当然如果你希望解析为对象,你可以:

public abstract class UserCallback extends Callback

{

//非UI线程,支持任何耗时操作

@Override

public User parseNetworkResponse(Response response) throws IOException

{

String string = response.body().string();

User user = new Gson().fromJson(string, User.class);

return user;

}

}

自己使用自己喜欢的Json解析库完成即可。

解析成List<User>,则如下:

public abstract class ListUserCallback extends Callback<List>

{

@Override

public List parseNetworkResponse(Response response) throws IOException

{

String string = response.body().string();

List user = new Gson().fromJson(string, List.class);

return user;

}

}

五、对于https单向认证


非常简单,拿到xxx.cert的证书。

然后调用

OkHttpUtils.getInstance()

.setCertificates(inputstream);

建议使用方式,例如我的证书放在assets目录:

/**

  • Created by zhy on 15/8/25.

*/

public class MyApplication extends Application

{

@Override

public void onCreate()

{

super.onCreate();

try

{

OkHttpUtils

.getInstance()

.setCertificates(getAssets().open(“aaa.cer”),

getAssets().open(“server.cer”));

} catch (IOException e)

{

e.printStackTrace();

}

}

}

即可。别忘了注册Application。

注意:如果https网站为权威机构颁发的证书,不需要以上设置。自签名的证书才需要。

六、配置


(1)全局配置

可以在Application中,通过:

OkHttpClient client =

OkHttpUtils.getInstance().getOkHttpClient();

然后调用client的各种set方法。

例如:

client.setConnectTimeout(100000, TimeUnit.MILLISECONDS);

(2)为单个请求设置超时

比如涉及到文件的需要设置读写等待时间多一点。

OkHttpUtils

.get()//

.url(url)//

.tag(this)//

.build()//

.connTimeOut(20000)

.readTimeOut(20000)

.writeTimeOut(20000)

.execute()

调用build()之后,可以随即设置各种timeOut.

(3)取消单个请求

RequestCall call = OkHttpUtils.get().url(url).build();

call.cancel();

(4)根据tag取消请求

目前对于支持的方法都添加了最后一个参数Object tag,取消则通过OkHttpUtils.cancelTag(tag)执行。

例如:在Activity中,当Activity销毁取消请求:

OkHttpUtils

.get()//

.url(url)//

.tag(this)//

.build()//

@Override

protected void onDestroy()

{

super.onDestroy();

//可以取消同一个tag的

OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求

}

相关文章:

Android 一个改善的okHttp封装库

Android Studio 使用前&#xff0c;对于Android Studio的用户&#xff0c;可以选择添加: compile project(‘:okhttputils’) 或者 compile ‘com.zhy:okhttputils:2.0.0’ Eclipse 自行copy源码。 二、基本用法 目前基本的用法格式为&#xff1a; OkHttpUtils .get()…...

瓦罗兰特低价区怎么下载 瓦罗兰特低价区下载教程+免费加速器推荐

瓦罗兰特是由拳头发行的游戏&#xff0c;以其丰富的游戏内容和刺激的竞技体验赢得了广大玩家的喜爱。于其它热门的射击游戏不一样的是&#xff0c;我们在游戏中可以选择不的英雄&#xff0c;每一个英雄都有着自己独特的技能&#xff0c;我们还可以在游戏中强行改变地形帮助我们…...

lspci总结

lspci总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨一个在 Linux 系统中常用的命令&#xff1a;lspci。lspci 命令用于列出当前系统中的 P…...

Android开启HTTP服务

需求&#xff1a;通过手机给设备升级固件&#xff0c;设备有WIFI 方案&#xff1a;升级包放到APP可以访问的目录&#xff0c;手机开热点并启动一个HTTP服务&#xff0c;设备连接手机热点&#xff0c;另外&#xff0c;设备端开启一个 telnet 服务&#xff0c;手机通过 telnet 登…...

NLP - word2vec详解

Word2Vec是一种用于将词汇映射到高维向量空间的自然语言处理技术。由Google在2013年提出&#xff0c;它利用浅层神经网络模型来学习词汇的分布式表示。Word2Vec有两种主要模型&#xff1a;CBOW&#xff08;Continuous Bag of Words&#xff09;和Skip-gram。 1. 模型介绍 Con…...

AI办公自动化:用通义千问批量翻译长篇英语TXT文档

在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\AI自媒体内容\待翻译&#xff1b; 获取里面所有TXT文档&#xff…...

一键解压,无限可能——BetterZip,您的Mac必备神器!

BetterZip for Mac 是一款高效、智能且安全的解压缩软件&#xff0c;专为Mac用户设计。它提供了直观易用的界面&#xff0c;使用户能够轻松应对各种压缩和解压缩需求。 这款软件不仅支持多种压缩格式&#xff0c;如ZIP、RAR、7Z等&#xff0c;还具备快速解压和压缩文件的能力。…...

【数学】什么是最大似然估计?如何求解最大似然估计

背景 最大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种估计统计模型参数的方法。它在众多统计学领域中被广泛使用&#xff0c;比如回归分析、时间序列分析、机器学习和经济学。其核心思想是&#xff1a;给定一个观测数据集&#xff0c;找到一组…...

跟张良均老师学大数据人工智能|企业项目试岗实训开营

我国高校毕业生数量连年快速增长&#xff0c;从2021年的909万人到2022年的1076万人&#xff0c;再到2023年的1158万人&#xff0c;预计到2024年将达到1187万人&#xff0c;2024年高校毕业生数量再创新高。 当年高校毕业生人数不等于进入劳动力市场的高校毕业生人数&#x…...

Pentest Muse:一款专为网络安全人员设计的AI助手

关于Pentest Muse Pentest Muse是一款专为网络安全研究人员和渗透测试人员设计和开发的人工智能AI助手&#xff0c;该工具可以帮助渗透测试人员进行头脑风暴、编写Payload、分析代码或执行网络侦查任务。除此之外&#xff0c;Pentest Muse甚至还能够执行命令行代码并以迭代方式…...

10 SpringBoot 静态资源访问

我们在开发Web项目的时候&#xff0c;往往会有很多静态资源&#xff0c;如html、图片、css等。那如何向前端返回静态资源呢&#xff1f; 以前做过web开发的同学应该知道&#xff0c;我们以前创建的web工程下面会有一个webapp的目录&#xff0c;我们只要把静态资源放在该目录下…...

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进…...

Python抓取天气信息

Python的详细学习还是需要些时间的。如果有其他语言经验的&#xff0c;可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套&#xff0c;学完即可进大厂&#xff01;&#xff08;附全套视频 下载&#xff09; (qq.com) 我们计划抓取的数据&#xff1a;杭州的天气信息…...

【超越拟合:深度学习中的过拟合与欠拟合应对策略】

如何处理过拟合 由于过拟合的主要问题是你的模型与训练数据拟合得太好&#xff0c;因此你需要使用技术来“控制它”。防止过拟合的常用技术称为正则化。我喜欢将其视为“使我们的模型更加规则”&#xff0c;例如能够拟合更多类型的数据。 让我们讨论一些防止过拟合的方法。 获…...

【Orange Pi 5与Linux内核编程】-理解Linux内核中的container_of宏

理解Linux内核中的container_of宏 文章目录 理解Linux内核中的container_of宏1、了解C语言中的struct内存表示2、Linux内核的container_of宏实现理解3、Linux内核的container_of使用 Linux 内核包含一个名为 container_of 的非常有用的宏。本文介绍了解 Linux 内核中的 contain…...

003.Linux SSH协议工具

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…...

web前端组织分析:深入剖析其结构、功能与未来趋势

web前端组织分析&#xff1a;深入剖析其结构、功能与未来趋势 在数字化浪潮的推动下&#xff0c;Web前端组织作为连接用户与数字世界的桥梁&#xff0c;其重要性日益凸显。本文将从四个方面、五个方面、六个方面和七个方面对Web前端组织进行深入分析&#xff0c;揭示其结构特点…...

GitCode热门开源项目推荐:Spider网络爬虫框架

在数字化高速发展时代&#xff0c;数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上&#xff0c;Spider网络爬虫框架凭借其简洁、高效和易用性&#xff0c;成为了众多开发者的首选。 一、系…...

实现一个二叉树的前序遍历、中序遍历和后序遍历方法。

package test3;public class Test_A27 {// 前序遍历&#xff08;根-左-右&#xff09;public void preOrderTraversal(TreeNode root){if(rootnull){return;}System.out.println(root.val"");preOrderTraversal(root.left);preOrderTraversal(root.right);}// 中序遍…...

串扰(二)

三、感性串扰 首先看下串扰模型及电流方向&#xff1a; 由于电感是阻碍电流变化&#xff0c;受害线的电流方向和攻击线的电流方向相反。同时由于受害线阻抗均匀&#xff0c;故有Vb-Vf&#xff08;感应电流属于电池内部电流&#xff09;。 分析感性串扰大小仍然是按微分的方法…...

零基础入门学用Arduino 第四部分(三)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…...

Mp3文件结构全解析(一)

Mp3文件结构全解析(一) MP3 文件是由帧(frame)构成的&#xff0c;帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件&#xff0c;MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组&#xff0c;特指活动影音压缩标准&#xff0c;MPEG 音频文件…...

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients<…...

被腰斩的颍川郡守赵广汉

在颍川&#xff0c;他发明了举报箱&#xff0c;铁腕扫黑除恶。因为曾经在郡府所在地阳翟&#xff08;禹州&#xff09;当过县令&#xff0c;熟悉颍川社情民意&#xff0c;所以&#xff0c;任职郡守后雷厉风行&#xff0c;才不到一年&#xff0c;不但制服了骄横的豪门大族&#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 目录管理器(200分) 🌍 评测功能需要订阅专栏后私信联系清隆…...

关于自学\跳槽\转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。下面的文字其实是我以前的一个回答&#…...

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型&#xff0c;它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…...

认识QML

为什么使用Qt Quick&#xff1f; Qt4的设计用于满足开发者在主流桌面操作系统上有一套表现一致的窗口组件可以 使用。如今Qt的使用者面临了新的问题&#xff0c;他们需要提供可触碰交互的用户界面以满 足软件界面需求&#xff0c;并在主流桌面操作系统和移动操作系统上实现这些…...

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…...

大文件上传实现

分片上传 将大文件分割成多个小片&#xff08;chunk&#xff09;&#xff0c;逐个上传。每个片上传成功后&#xff0c;服务器可以返回确认信息。所有片上传完成后&#xff0c;服务器端将这些片重新组合成原始文件。 以下是一个简单的分片上传的前端实现示例&#xff1a; func…...

wordpress 手机版本/重庆百度快照优化

之前微信小程序使用模板形式自定义的tabBar, 转到百度小程序发现不是很好用&#xff0c;data值传不进去&#xff0c;所以就做了修改&#xff0c;改成了component组件式了&#xff0c;下面是我的代码&#xff0c;有需要的朋友可以参考&#xff0c;根据自己需求调整 我的tabBar为…...

申请渠道门户网站是什么意思/seo常用方法

function trim(str) { if (str && typeof str "string") { return str.replace(/(^\s*)|(\s*)$/g,""); //去除前后空白符 } }转载于:https://www.cnblogs.com/RonnieQin/p/8466010.html...

个人网站有数量限制/百度搜索大全

环境搭建下载引擎代码Hello World修改配置文件需求实现 运行测试手Q中测试 环境搭建 由于目前玩一玩开发平台仅支持Mac&#xff0c;所以你需要一台Mac电脑或者黑苹果(但不推荐) 1、注册苹果账号 2、安装Xcode (建议在App Store中下载避免更新带来不必要的麻烦) 3、安装An…...

做电脑系统网站/女生做sem专员的工作难吗

人人译视界 for Mac是一款集AI翻译&#xff0c;时间轴制作、调整&#xff0c;视频压制、剪切、合并、转换&#xff0c;等多功能的智能翻译软件。人人译视界 Mac版能够为您轻松视频翻译&#xff0c;还能够与多名参与者在不同平台进行翻译&#xff0c;让您的工作更加方便快捷&…...

wordpress page样式/大数据培训机构排名前十

学.net有一段时间了&#xff0c;也参与过老师的几个课题项目的开发工作&#xff0c;但却比较少接触Asp.net的UI设计&#xff0c;虽然VS2005推出快两年了&#xff0c;但VS2005中新增的一些控件还没有怎么用过&#xff0c;近来闲着没事&#xff0c;就来学着玩下&#xff0c;从MS的…...

一般做网站是用什么程序做的/网络口碑营销

注册表信息重要说明 此部分、方法或任务包含的步骤告诉你如何修改注册表。 但是&#xff0c;注册表修改不当可能会出现严重问题。 因此&#xff0c;请一定严格按照下列步骤操作。 为了获得进一步的保护&#xff0c;请在修改注册表之前对其进行备份。 这样就可以在出现问题时还原…...