网络请求三方库——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的文件上传. ...
随机推荐
- android开发虚拟机不能正常启动
点击 window---perspective---DDMS---查看设备状态, 如果显示没有可用设备,则在AVD manager中重 启即可, 若列表中有设备,但显示offline 可采用一下方式 ...
- log4j配置生成日志保存在数据库
利用MDC可以存储参数,MDC原理:相当于一个map将值存储起来,调用时可以根据key将自定义的在值存入对应位置(数据库或文件等).使用: 配置文件:log4j.properties ### dire ...
- 解决ORA-14450:试图访问已经在使用的事务处理临时表
select * from dba_objects where object_name='TEMP_MZGL_BRSFD'; select 'alter system kill session ''' ...
- linux一些常用命令
本人是linux小白,因项目接触linux不久,收集了一些常用的linux命令,希望对后来者有用. --列出/var/data目录下按A-Z字母排序的前100个文件ls /var/data |sort ...
- oracle xmltype导入并解析Excel数据 (一)创建表与序
表说明: T_EXCEL_IMPORT_DATASRC: Excel数据存储表,(使用了xmltype存储Excel数据) 部分字段说明: BUSINESSTYPE: Excel模板类型,一个Exce ...
- SE homework2
1. (1) Fault: for循环语句中的条件表达式i > 0,不能检查到数组的第一个元素,应该为 i >= 0 . (2) test:x=[]:y=3 Expected = -1 A ...
- Record:Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView
Handle onClick for our custom LinearLayout for Gallery-like HorizontalScrollView The post "Im ...
- JavaScript面向对象编程学习笔记
1 Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...
- ARM指令教程
ARM指令教程 ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理 ...
- Cocos2d-x建工程时避免copy文件夹和库
方法一:(官方做法) 打开F:\cocos2d-1.0.1-x-0.9.1目录下的cocos2d-win32.vc2010.sln文件,然后右键点击解决方案,选择"添加"—&quo ...