OkHttp
来源:互联网 发布:网络虚拟现实 编辑:程序博客网 时间:2024/06/06 14:06
在Okhttp之前有android-async-http它的内部使用HttpClient (google在android6.0已经移除了HttpClient),还有国内的Xutils最新的额Xutils3
还有2013年谷歌大会退出的Velloy 缺点是上传和下载大文件事它的弱项
Okhttp内部依赖一个square公司出品的网络请求的库(okio)现在已经被google使用在android的源码上面,可见其功能的强大
OKHTTP的简介:
okhttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,
通过链接池来减小相应的延迟,还有透明的GZIP压缩,请求缓存等优势,
其核心主要有路由,连接协议,拦截器,代理,安全性认证,连接池以及网络的适配,
拦截器主要是指添加,一处,或者转换请求,或者回应的头部信息
OKhttp支持的主要的功能:
1、联网 请求文本数据(GET,POST)
2、支持大问价的上传
3、大文件的下载
4、请求图片
个人总结使用okhttp的基本步骤:
/** * 步骤: * 1,得到OkHttpClient对象 * 2,得到一个请求 Requst请求 * 3,使用OkHttpClient对象 调用newCall()方法 将请求Requst请求转成Call任务 * 4,执行Call任务 (同步 异步) * * 更新Ui需要传递到主线程 */
在build.gradle文件里面添加的依赖compile 'com.squareup.okhttp3:okhttp:3.4.2'
okHttp的get用法简单的Demo:OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new Request.Builder() .url("http://interfaces.ziroom.com/index.php?_p=api&_a=carousel") .addHeader("User-Agent","Apache-HttpClient/UNAVAILABLE (java 1.4)") .build(); final Call call = okHttpClient.newCall(request); //2,同步请求// new Thread(){// @Override// public void run() {// super.run();// try {// Response response = call.execute();// if(response.isSuccessful()){// Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());// Log.e("AAA","==请求成功信息=>"+response.message());// Log.e("AAA","==请求成功码=>"+response.code());// Log.e("AAA","==请求成功数据=>"+response.body().string());// Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());//// }// } catch (IOException e) {// e.printStackTrace();// }// }// }.start(); //1,执行异步任务 //note:请求结果在子线程 //note:请求数据 执行一遍是有数据的 再次执行无数据 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //失败 } @Override public void onResponse(Call call, Response response) throws IOException { //成功 if(response!=null){ Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); Log.e("AAA","==请求成功信息=>"+response.message()); Log.e("AAA","==请求成功码=>"+response.code()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); } } });okHttp的Post请求:OkHttpClient okHttpClient = new OkHttpClient(); //FormEncodingBuilder body = new FormEncodingBuilder();//这是OkHttp 的用法 3有所改变 FormBody.Builder builder = new FormBody.Builder(); builder.add("pageNo","1"); builder.add("pageSize","20"); builder.add("serialIdes","2143,3404"); builder.add("v","4.0.0"); FormBody body = builder.build(); /* body.add("pageNo","1");这是OkHttp 的用法 3有所改变 body.add("pageSize","20"); body.add("serialIds","2143,3404"); body.add("v","4.0.0");*/ Request request = new Request.Builder() .url("http://mrobot.pcauto.com.cn/v2/cms/channels/1?") .post(body) .build(); Call call = okHttpClient.newCall(request); //2,同步请求// new Thread(){// @Override// public void run() {// super.run();// try {// Response response = call.execute();// if(response.isSuccessful()){// Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());// Log.e("AAA","==请求成功信息=>"+response.message());// Log.e("AAA","==请求成功码=>"+response.code());// Log.e("AAA","==请求成功数据=>"+response.body().string());// Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());//// }// } catch (IOException e) {// e.printStackTrace();// }// }// }.start();// //1,执行异步任务 //note:请求结果在子线程 //note:请求数据 执行一遍是有数据的 再次执行无数据 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //成功 if(response!=null){ Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); Log.e("AAA","==请求成功信息=>"+response.message()); Log.e("AAA","==请求成功码=>"+response.code()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); } } });
0 0
- OkHttp
- okhttp
- OkHttp
- OkHttp
- OkHttp
- okhttp
- OKHTTP
- okhttp
- Okhttp
- okHttp
- OkHttp
- okhttp
- Okhttp
- okhttp
- OkHttp
- okhttp
- okhttp
- okhttp
- 使用百度云加速防apache的ab测试ddos攻击
- 机器学习小组知识点17:对数正态分布(Logarithmic Normal Distribution)
- java基础-集合框架3 list接口
- 比较QMap、QHash(顺便讲了如何解决QMap和QList混合时遇到的坑)
- 二期
- OkHttp
- 程序员情书
- c++字符串的转化 (string,char* tchar*)
- 关于内存实验的总结
- mysql视图、存储过程、函数、索引全解析
- PHP的常用函数(一)
- 常见框架单例&多例 与 线程安全性总结
- 带你玩转Visual Studio——性能分析与优化
- C#中Activator.CreateInstance()方法用法分析