Android OkHttp3网络请求框架使用入门
2016-10-18 20:29
543 查看
OkHttp
An HTTP & HTTP/2 client for Android and Java applications.概述
HTTP是现代应用的网络。这是我们交换数据和媒体的媒介。使用HTTP有效提高加载的速度和节省带宽。OkHttp是一种更有效率的HTTP客户端:
HTTP/2支持允许发向相同主机的请求分享一个套接字;
连接池减少请求的延迟(如HTTP / 2不可用);
透明的gzip收缩下载大小;
响应缓存避免了重复请求。
概括起来说OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟问题。
下载配置
Jar方式:okhttp-3.4.1.jar
你也需要Okio, okhttp采用其快速I/O和可调整大小的缓冲区。Okio的最新Jar下载.
Maven方式:
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.4.1</version> </dependency>
GRADLE方式
compile 'com.squareup.okhttp3:okhttp:3.4.1'
使用
OkHttp支持同步&异步获得数据1. 同步get
new Thread(new Runnable() { @Override public void run() { //1. 得到OKHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); //2. 获取Request对象 ,内部也是通过建造者模式去封装的一些请求参数 Request request = new Request.Builder() .url(url) .build(); //3. 获取Call对象 Call call = okHttpClient.newCall(request); //4. 获取Response对象 try { Response response = call.execute(); //响应体 ResponseBody body = response.body(); //可以根据自己的需要,返回相应的类型: //可以返回byte数组, 可以返回 InputStream ,可以返回 字符串 // byte[] bytes = body.bytes(); //InputStream inputStream = body.byteStream(); final String result = body.string(); //注意这里是string()方法,不要写成toString() // 这个方法执行在主线程当中 // 如果 当前的动作,在主线程中会立即执行 // 如果 当前的动作在子线程中,会先发送到主线程中,然后去执行 runOnUiThread(new Runnable() { @Override public void run() { mTvResult.setText(result); } }); } catch (IOException e) { e.printStackTrace(); } } }).start();
2. 异步get
//1. 得到OKHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient(); //2. 获取Request对象 Request request = new Request.Builder() .url(Constant.URL_GET_ASYNC) .build(); //3. 获取Call对象 Call call = okHttpClient.newCall(request); //4. 获取Response对象, 通过接口回调方式返回Response call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //TODO 请求失败逻辑在这里处理 //TODO 注意:这里边都是子线程,所以要更改UI的时候需要发送到主线程才OK } @Override public void onResponse(Call call, Response response) throws IOException { //TODO 请求成功时候 //TODO 注意:这里边都是子线程,所以要更改UI的时候需要发送到主线程才OK String result = response.body().string(); } });
3.同步post
new Thread(new Runnable() { @Override public void run() { //1. 得到OKHttpClient OkHttpClient okHttpClient = new OkHttpClient(); //2. 得到RequestBody对象,通过FormBody.Builder()来获取,通过add方法提交键值对 RequestBody body = new FormBody.Builder() .add("key1", "value1") .add("key2", "value2") .build(); //3. 创建Request对象 Request request = new Request.Builder() .url(url) .post(body) .build(); //4. 得到Call对象 Call call = okHttpClient.newCall(request); try { Response response = call.execute(); if (response.isSuccessful()) { final String result = response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { mTvResult.setText(result); } }); } } catch (IOException e) { e.printStackTrace(); } } }).start();
异步post
OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("key1", "value1") .add("key2", "value2") .build(); Request request = new Request.Builder() .url(url) .post(requestBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //TODO 失败的,在子线程中 } @Override public void onResponse(Call call, Response response) throws IOException { //TODO 成功时,在子线程中。 } });
提交json数据
OkHttpClient okHttpClient = new OkHttpClient(); //创建RequetBody对象, 这里注意:不论什么类型的Post请求,只是 RequestBody获取的方式不一样,其他步骤的一模一样 MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); RequestBody requestBody = RequestBody.create(mediaType, YOURJSONSTRING); //获取Request对象 Request request = new Request.Builder() .url(url) .post(requestBody) .build(); //获取Call对象 Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { } });
(完毕)
相关文章推荐
- Android中开源网络请求框架OkHttp使用
- Android网络请求框架使用 -- OkHttp
- 在android中使用OkHttp框架处理网络请求
- Android网络请求框架----Okhttp3完全解析(1),使用篇
- Android使用OKHTTP网络框架请求数据,RecyclerView结合Glide展示图片,瀑布流布局样式
- Android ——网络请求框架OkHttp使用
- Okhttp使用简析——Android网络请求框架(一)
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- 使用okhttp androidannotaion springandroid 等框架搭建请求网络的框架
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- Android网络请求框架的使用okhttp
- Android 网络请求框架 OkHttp 的使用
- Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
- Okhttp网络请求框架简析——Android网络请求框架(一)
- Android开源网络请求框架Retrofit的介绍使用
- Android 网络请求框架android-async-http简单使用
- 安卓网络请求框架okHttp的使用与封装
- Android中使用Volley框架进行网络请求
- android中Okhttp框架进行网络请求的工具类()
- 使用android-async-http来封装Android网络请求框架