网络请求三方库——OkHttp
我们知道在Android开发中是可以直接使用现成的API进行网络请求的,就是使用 HttpClient 和 HttpURLConnention ,而Android 4.4 之后 HttpClient 已经被废弃,由于此前一直很流行的三方库 android-async-http 是基于 HttpClient 的,所以作者已经放弃了维护 android-async-http 库,我们在项目中也尽量不要使用这个库。
OkHttp是Squaur公司开源的一个高性能Http请求库,它的职责同 HttpURLConnention 是一样的,支持SDPY、Http 2.0、websocket,支持同步、异步,而且OkHttp又封装了线程池、数据转换、参数使用、错误处理等,API使用起来更加方便。
这里首先简单的介绍一下最新版 OkHttp 3.4.1 的使用以及对于同步GET和POST请求的简单封装,后续会补上异步GET和PST请求、源码解析等内容。
OkHttp同步GET、POST请求网络
下面代码封装了两个使用OkHttp同步GET、POST请求网络的API,服务器返回来的都是JSON格式的字符串,而对于POST请求,客户端提交上去的也是JSON格式的字符串,源码如下:
/**
* Created by stevewang on 2016/7/28.
*/
public class OkHttpUtils
{
private static final OkHttpClient mClient = new OkHttpClient();
public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8"); /**
* GET方式同步请求网络,服务器端返回JSON格式的响应
*
* @param urlString
* @return
* @throws IOException
*/
public static String getStringFromURL(String urlString) throws IOException
{
// 1. 获取Request对象
Request request = new Request.Builder()
.url(urlString)
.build();
// 2. 获取Call对象
Call call = mClient.newCall(request);
// 3. 调用同步请求方法execute(),获取Response对象,
Response response = call.execute();
// 4. 获取ResponseBody对象
ResponseBody responseBody = response.body();
if(responseBody != null)
{
// 5. 从ResponseBody对象中取出服务器端返回数据
return responseBody.string();
}
return null;
} /**
* POST方式同步请求网络,向服务器端提交JSON格式的请求,服务器端返回JSON格式的响应
*
* @param urlString
* @param jsonRequest
* @return
* @throws IOException
*/
public static String postJsonToURL(String urlString, String jsonRequest) throws IOException
{
// 1. 首先构造RequestBody对象,指定了MediaType为JSON,这一步是POST请求与GET请求的主要区别
RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonRequest);
// 2. 获取Request对象,将RequestBody放置到Request对象中
Request request = new Request.Builder()
.url(urlString)
// .addHeader(name, value) // 添加请求头
.post(requestBody)
.build();
// 3. 获取Call对象
Call call = mClient.newCall(request);
// 4. 调用同步请求方法execute(),获取Response对象,
Response response = call.execute();
// 5. 获取ResponseBody对象
ResponseBody responseBody = response.body();
if(responseBody != null)
{
// 6. 从ResponseBody对象中取出服务器端返回数据
return responseBody.string();
}
return null;
}
}
网络请求三方库——OkHttp的更多相关文章
- Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...
- 从网络请求过程看OkHttp拦截器
前言 之前我们结合设计模式简单说了下OkHttp的大体流程,今天就继续说说它的核心部分--拦截器. 因为拦截器组成的链其实是完成了网络通信的整个流程,所以我们今天就从这个角度说说各拦截器的功能. 首先 ...
- python爬虫#网络请求requests库
中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...
- Java/Android 网络请求框架/库
Android 图片缓存框架 最上面的最优先 com.facebook.fresco:fresco:0.12.0 7.26.2016最新 Universal-Image ...
- iOS开发之网络请求(基于AFNetworking的再封装)
最近一直很忙也没有什么时间写博客了.放假了休息一下,就写一篇博客来总结一下最近做项目中出现过的问题吧!!! 首先,在项目中我的起到了什么作用,无非就是把美工(UI设计师)给我们的图显示出来,然后再和服 ...
- Android okHttp网络请求之Get/Post请求
前言: 之前项目中一直使用的Xutils开源框架,从xutils 2.1.5版本使用到最近的xutils 3.0,使用起来也是蛮方便的,只不过最近想着完善一下app中使用的开源框架,由于Xutils里 ...
- Android常用网络请求框架Volley Retrofit (okHttp)
Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient.在 Android 5.0 的时候 Google 就不推荐使用 HttpClient ...
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
随机推荐
- spring 源码
spring AOP的Advice(通知) Advice(通知)定义在连接点做什么,为切面增强提供织入接口. BeforeAdvice AfterAdvice ThrowsAdvice的设计,体现了A ...
- K均值聚类算法的MATLAB实现
1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...
- Python学习路程day19
Python之路,Day19 - Django 进阶 本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...
- eclipse + marven
eclipse使用maven管理项目,可以自动下载依赖包(尤其是容易引起依赖包冲突的场合),也可以实现打jar包,编译等功能 1 eclipse安装maven插件 使用Eclipse--help-- ...
- NOIP 考前 队列复习
BZOJ 1127 #include <cstdio> #include <cstring> #include <iostream> #include <al ...
- Oracle 导入导出--and一些知识,备忘
这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮. 本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西. 你的导出:exp yc/yc@orcl ...
- java问题排查可能用到的一些命令
1. jmap查询jvm内存使用情况 -heap :打印jvm heap的情况 -histo: 打印jvm heap的直方图.其输出信息包括类名,对象数量,对象占用大小. -histo:live : ...
- 分布式事务(一)两阶段提交及JTA
原创文章,同步发自作者个人博客 http://www.jasongj.com/big_data/two_phase_commit/ 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或 ...
- linux c网络编程之函数
1. struct protoent *protocol=getprotobyname(char *p); 功能:通过协议名获取协议类型信息 解释:p为字符串指针,指向一个协议名,如icmp,stru ...
- HTML5 input placeholder 颜色修改示例
Chrome支持input=[type=text]占位文本属性,但下列CSS样式却不起作用: CSS 复制代码 代码如下: input[placeholder], [placeholder], *[p ...