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的方式,让用户自己去解析返回的数据,目前提供了StringCallback,FileCallback,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 使用前,对于Android Studio的用户,可以选择添加: compile project(‘:okhttputils’) 或者 compile ‘com.zhy:okhttputils:2.0.0’ Eclipse 自行copy源码。 二、基本用法 目前基本的用法格式为: OkHttpUtils .get()…...
瓦罗兰特低价区怎么下载 瓦罗兰特低价区下载教程+免费加速器推荐
瓦罗兰特是由拳头发行的游戏,以其丰富的游戏内容和刺激的竞技体验赢得了广大玩家的喜爱。于其它热门的射击游戏不一样的是,我们在游戏中可以选择不的英雄,每一个英雄都有着自己独特的技能,我们还可以在游戏中强行改变地形帮助我们…...
lspci总结
lspci总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨一个在 Linux 系统中常用的命令:lspci。lspci 命令用于列出当前系统中的 P…...
Android开启HTTP服务
需求:通过手机给设备升级固件,设备有WIFI 方案:升级包放到APP可以访问的目录,手机开热点并启动一个HTTP服务,设备连接手机热点,另外,设备端开启一个 telnet 服务,手机通过 telnet 登…...
NLP - word2vec详解
Word2Vec是一种用于将词汇映射到高维向量空间的自然语言处理技术。由Google在2013年提出,它利用浅层神经网络模型来学习词汇的分布式表示。Word2Vec有两种主要模型:CBOW(Continuous Bag of Words)和Skip-gram。 1. 模型介绍 Con…...
AI办公自动化:用通义千问批量翻译长篇英语TXT文档
在deepseek中输入提示词: 你是一个Python编程专家,现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本,具体步骤如下: 打开文件夹:F:\AI自媒体内容\待翻译; 获取里面所有TXT文档ÿ…...
一键解压,无限可能——BetterZip,您的Mac必备神器!
BetterZip for Mac 是一款高效、智能且安全的解压缩软件,专为Mac用户设计。它提供了直观易用的界面,使用户能够轻松应对各种压缩和解压缩需求。 这款软件不仅支持多种压缩格式,如ZIP、RAR、7Z等,还具备快速解压和压缩文件的能力。…...
【数学】什么是最大似然估计?如何求解最大似然估计
背景 最大似然估计(Maximum Likelihood Estimation, MLE)是一种估计统计模型参数的方法。它在众多统计学领域中被广泛使用,比如回归分析、时间序列分析、机器学习和经济学。其核心思想是:给定一个观测数据集,找到一组…...
跟张良均老师学大数据人工智能|企业项目试岗实训开营
我国高校毕业生数量连年快速增长,从2021年的909万人到2022年的1076万人,再到2023年的1158万人,预计到2024年将达到1187万人,2024年高校毕业生数量再创新高。 当年高校毕业生人数不等于进入劳动力市场的高校毕业生人数&#x…...
Pentest Muse:一款专为网络安全人员设计的AI助手
关于Pentest Muse Pentest Muse是一款专为网络安全研究人员和渗透测试人员设计和开发的人工智能AI助手,该工具可以帮助渗透测试人员进行头脑风暴、编写Payload、分析代码或执行网络侦查任务。除此之外,Pentest Muse甚至还能够执行命令行代码并以迭代方式…...
10 SpringBoot 静态资源访问
我们在开发Web项目的时候,往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢? 以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下…...
Unity 之通过自定义协议从浏览器启动本地应用程序
内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进…...
Python抓取天气信息
Python的详细学习还是需要些时间的。如果有其他语言经验的,可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套,学完即可进大厂!(附全套视频 下载) (qq.com) 我们计划抓取的数据:杭州的天气信息…...
【超越拟合:深度学习中的过拟合与欠拟合应对策略】
如何处理过拟合 由于过拟合的主要问题是你的模型与训练数据拟合得太好,因此你需要使用技术来“控制它”。防止过拟合的常用技术称为正则化。我喜欢将其视为“使我们的模型更加规则”,例如能够拟合更多类型的数据。 让我们讨论一些防止过拟合的方法。 获…...
【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协议工具
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...
web前端组织分析:深入剖析其结构、功能与未来趋势
web前端组织分析:深入剖析其结构、功能与未来趋势 在数字化浪潮的推动下,Web前端组织作为连接用户与数字世界的桥梁,其重要性日益凸显。本文将从四个方面、五个方面、六个方面和七个方面对Web前端组织进行深入分析,揭示其结构特点…...
GitCode热门开源项目推荐:Spider网络爬虫框架
在数字化高速发展时代,数据已成为企业决策和个人研究的重要资源。网络爬虫作为一种强大的数据采集工具受到了广泛的关注和应用。在GitCode这一优秀的开源平台上,Spider网络爬虫框架凭借其简洁、高效和易用性,成为了众多开发者的首选。 一、系…...
实现一个二叉树的前序遍历、中序遍历和后序遍历方法。
package test3;public class Test_A27 {// 前序遍历(根-左-右)public void preOrderTraversal(TreeNode root){if(rootnull){return;}System.out.println(root.val"");preOrderTraversal(root.left);preOrderTraversal(root.right);}// 中序遍…...
串扰(二)
三、感性串扰 首先看下串扰模型及电流方向: 由于电感是阻碍电流变化,受害线的电流方向和攻击线的电流方向相反。同时由于受害线阻抗均匀,故有Vb-Vf(感应电流属于电池内部电流)。 分析感性串扰大小仍然是按微分的方法…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
