我们知道在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;
}
}

最新文章

  1. Navisworks 2014 Api 简单的使用
  2. C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)
  3. SQL复制一个表的数据到另一个表
  4. 正则表达式之IP地址检验
  5. Quartz Sheduler 入门
  6. iOS基础 - 多媒体
  7. idx_rebuild_diff_idx_l.sql
  8. Yii框架用ajax提交表单时候报错Bad Request (#400): Unable to verify your data submission.
  9. 关于HTTP请求出现 405状态码 not allowed的解决办法
  10. [HAOI2007]分割矩阵
  11. vs2015启动崩溃,wpfgfx_v0400.dll加载D3DCompiler_47.dll失败
  12. linux下python3调用c代码或者python3调用c++代码
  13. Django基础篇--用户权限管理和组管理
  14. linux 时间相关的一些总结
  15. Python 创建线程的方法
  16. Hibernate hibernate.cfg.xml配置
  17. ARP 地址分类 NAT技术
  18. java7之Special Methods
  19. UIPanel
  20. nginx防ddos配置

热门文章

  1. 初学Spring
  2. 北大poj-1005
  3. 静态方法中的this
  4. RABBITMQ(小总结 持续更新...
  5. 子级与父级的margin合并的问题
  6. 总结之H3C汇聚层交换机认证在线人数展示系统
  7. iOS判断程序在前台还是后台
  8. Newtonsoft.Json 处理多态类型的反序列化
  9. Android 中onConfigurationChanged问题
  10. SILVERLIGHT 应急卫生模拟演练项目之GRID布局