OkHttp封装之后使用
代码都封装好了,上层Activity如何调用呢?
1.依赖
如果是android studio开发支持在线依赖(我已经把项目添加到jcenter上):
compile 'com.ansen.http:okhttpencapsulation:1.0.1'
如果是eclipse那你先把ide切换到android studio吧。。。不闲麻烦的话也可以把源码module的源码copy出来,反正也就几个类。
2.初始化HTTPCaller类
初始化的工作可以放Application,新建MyApplication类继承Application。初始化的时候通过HttpConfig设置一些参数,也可以添加公共参数。
public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
HttpConfig httpConfig=new HttpConfig();
httpConfig.setAgent(true);//有代理的情况能不能访问
httpConfig.setDebug(true);//是否debug模式 如果是debug模式打印log
httpConfig.setTagName("ansen");//打印log的tagname
//可以添加一些公共字段 每个接口都会带上
httpConfig.addCommonField("pf","android");
httpConfig.addCommonField("version_code","1");
//初始化HTTPCaller类
HTTPCaller.getInstance().setHttpConfig(httpConfig);
}
}
因为自定义Application,需要给AndroidManifest.xml文件application标签中的android:name属性赋值,指定自己重写的MyApplication。
发送get请求
发送get请求就一行代码。
HTTPCaller.getInstance().get(User.class, "http://139.196.35.30:8080/OkHttpTest/getUserInfo.do?per=123", null, requestDataCallback);
请求回调
http请求回调接口,无论成功或者失败都会回调。因为是测试所以都用在这个接口来回调,在真实的企业开发中,不同的请求用不同的回调。
private RequestDataCallback requestDataCallback = new RequestDataCallback<User>() {
@Override
public void dataCallback(User user) {
if(user==null){
Log.i("ansen", "请求失败");
}else{
Log.i("ansen", "获取用户信息:" + user.toString());
}
}
};
发送post请求
post请求参数不是跟在url后面的,所以需要把请求参数放到集合里面。因为登录接口也是返回的用户信息,所以可以跟get请求用同一回调。
List<NameValuePair> postParam = new ArrayList<>();
postParam.add(new NameValuePair("username","ansen"));
postParam.add(new NameValuePair("password","123"));
HTTPCaller.getInstance().post(User.class, "http://139.196.35.30:8080/OkHttpTest/login.do", null, postParam, requestDataCallback);
上传文件
1.上传文件不带回调进度
updaloadFile(null);
2.上传文件回调上传进度
updaloadFile(new ProgressUIListener(){
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
上传文件跟其他表单参数不一样的地方就是new NameValuePair对象的时候需要传入三个参数,最后一个参数需要设置成true。
private void updaloadFile(ProgressUIListener progressUIListener){
List<NameValuePair> postParam = new ArrayList<>();
postParam.add(new NameValuePair("username", "ansen"));
postParam.add(new NameValuePair("password", "123"));
String filePath=copyFile();//复制一份文件到sdcard上,并且获取文件路径
postParam.add(new NameValuePair("upload_file",filePath,true));
if(progressUIListener==null){//上传文件没有回调进度条
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback);
}else{//上传文件并且回调上传进度
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, postParam, requestDataCallback,progressUIListener);
}
}
上传文件(传入byte数组)
byte[] bytes=getUploadFileBytes();//获取文件内容存入byte数组
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file","test.txt",bytes,requestDataCallback);
上传文件(传入byte数组)&&回调上传进度
byte[] bytes=getUploadFileBytes();//获取文件内容存入byte数组
HTTPCaller.getInstance().postFile(User.class, "http://139.196.35.30:8080/OkHttpTest/uploadFile.do", null, "upload_file", "test.txt", bytes, requestDataCallback, new ProgressUIListener() {
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","upload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
下载文件&&回调下载进度
String saveFilePath=Environment.getExternalStorageDirectory() + "/test/test222.txt";
HTTPCaller.getInstance().downloadFile("http://139.196.35.30:8080/OkHttpTest/upload/test.txt",saveFilePath,null,new ProgressUIListener(){
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
Log.i("ansen","dowload file content numBytes:"+numBytes+" totalBytes:"+totalBytes+" percent:"+percent+" speed:"+speed);
}
});
修改公共参数
HTTPCaller.getInstance().updateCommonField("version_code","2");//更新公共字段版本号的值
源码下载
OkHttp如何封装点击这里
如果你想第一时间看我的后期文章,扫码关注公众号,每周不定期推送Android开发实战教程文章...
Android开发666 - 安卓开发技术分享
扫描二维码加关注
OkHttp封装之后使用的更多相关文章
- okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数
如标题所示,okhttp封装时,提示 cannot resolve method OkHttpClient setConnectTimeout() 函数,有遇到这样现象的朋友吗? 原因:因使用的是 ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(一)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(三)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这一篇主要讲一下将OkHttpUtils运用到mvp模式中. 数据请求地址:http://www.wanandroid.com/to ...
- volley+okhttp封装,一行代码就可访问网络
volley+okhttp封装,一行代码就可访问网络 前言: 我写这个可能不会完全的教会你去怎么封装一个网络框架,我的目的在于让你不需要你自己封装就可以访问网络,或者说互相学习也可以,我只是想让你大概 ...
- Android 一个改进的okHttp封装库
一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...
- Android 一个改善的okHttp封装库
膜拜一下~ 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867: 本文出自:[张鸿洋的博客] 一.概述 之前写了篇A ...
- 超简单的okhttp封装工具类(上)
版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...
- Okhttp封装、网络层扩展
一.概述 首先在这里本片文章是以网络通信封装为主,而app开发首先重要就是网络通信,而如今主流的async.volley.okhttp等,阿么这么网络库怎样能做到更好封装.更好的切换,从而不影响业务层 ...
- okhttp封装
对这玩意并不熟,网上有很多大神封装好的,但是懒得看里面的封装逻辑,索性自己简单做个封装,方便使用,出现bug也好查找: get请求: /** * get请求 * @param url * @param ...
随机推荐
- Python 基础:分分钟入门
Python和Pythonic Python是一门计算机语言(这不是废话么),简单易学,上手容易,深入有一定困难.为了逼格,还是给你们堆一些名词吧:动态语言.解释型.网络爬虫.数据处理.机器学习.We ...
- [git] commit 相关的操作
本地仓库状态相关的操作 1. git commit 将从上次提交后到现在这段时间内,暂存区所有的变化提交到版本库中: git commit -m '此次提交操作的简要说明(单引号括起来)' c ...
- 读取.Properties文件以及Spring注解读取文件内容
public class Main { public static void main(String[] args) throws IOException { //创建Properties对象 Pro ...
- USB插入电脑的硬件检测和枚举流程
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两 ...
- U-boot的编译方式及目录结构解析
U-boot的整体结构和linux基本类似,编译方式一般也是非常类似的,一般的编译命令: make CROSS_COMPILE=arm-linux-gnueabihf- XXX(目标名) 清除命令: ...
- Win10手记-取色器ColorPicker的实现
最近个人项目需要用到ColorPicker,但是适用于WinRT和Win10的基本没用,所以只能自己造轮子了. 平台环境 Windows 10 Visual Studio 2015 思路 确定需求后, ...
- android 代码混淆示例
参考其它资料为项目代码做了一下混淆 项目中使用了 slidingmenu actionbarsherlock fastjson volley httpclient 等第三方库, 并使用了 ...
- docker push 出现:x509: certificate signed by unknown authority
今天,部署生产的程序的时候,出现一个问题:编译正常,但是,docker 把编译好的image 推送到生产环境上去的时候,出现:x509: certificate signed by unknown a ...
- 逆向知识之CS辅助/外挂专题.2.实现CS1.6透视原理
逆向知识之CS辅助/外挂专题.2.实现CS1.6透视原理 一丶透视简介 我们涉及到FPS游戏.免不了说透视.自瞄什么的. 在CS1.6中. 有OpenGl.也有D3D. 透视的方法很多. gl透视(也 ...
- SQL Case when 的使用
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...