网络请求框架OKHttp

1 前言

Android为我们提供了两种Http交互方式:HttpURLConnetcion和Apach HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,Ipv6和连接池,已经足够满足我们各种HTTP请求的需求。但更高效的HTTP可以让我们的应用更快、更加节省流量。

2 OKHttp介绍

OKHttp是HTTP Android客户端,支持SYPD(共享一个Sokket来处理同一个服务器的请求)、支持GZIP来减少数据流量,缓存相应数据来减少重复的网络请求。

3 OKHttp的简单使用

在Android staudio中使用OKHttp框架首先需要将框架的jar文件拷贝到项目的lib文件夹下,或者在build.gradle文件中添加以下代码:

compile 'com.squareup.okhttp:okhttp:2.3.0'
注意:

OKHttp在使用的时候需要使用okio依赖包,所以在项目中也需要加入哦okio库。
使用OKHttp框架完成http交互需要几下几个步骤:
- 1 创建OKHttpClient对象
- 2 创建Request对象,添加url等参数
- 3 用OKHttpClient的对象,以Request对象为参数创建Call请求对象。
- 4 执行call请求或者将call请求加入到请求队列中。
- 处理CallBack的onReponse或者onFailure回调函数

代码如下:
OkHttpClient okHttpClient = new OKHttpClient();
Request request = new Request.Builder().url("wwww.baidu.com").build();
Call call = okHttpClient.newCall(request);
call.enqueue(new CallBack{
    @Override
    public void onFailure(Request request, IOException e)
    {
    }

    @Override
    public void onResponse(final Response response) throws IOException
    {
        //String htmlStr =  response.body().string();
    }
});

如果不要异步请求,则可以直接执行call

call.execute();

如果是post请求的话,Request对象的创建方式如下:

FormEncodingBuilder builder = new FormEncodingBuilder(0;
builder.add("key", "value");
Request request = new Request.Builder()
                        .url("www.baidu.com")
                        .post(builder.build())
                        .build();

如果http请求正确,则执行onReponse()回调函数,回调函数的参数是Response,一般这个Response可以是String,byte, 或者InputStream类型。
获取Response的方法是:

- String responseStr = response.body.string();
- byte[] responseBytes = response.body().bytes();
- ByteArrayInputStream inputStream = (ByteArrayInputStream)response.body().byteStream();

我们发现竟然可以返回Stream类型,那么onResponse回调函数就不可能是在主线程中调用,所以如果在返回结果后更新UI操作,需要使用handlder机制。

图像

OkHttp也提供了对图像请求的支持:

OkHttpClientManager.displayImage(mImageView, "http://images.csdn.net/20150817/1.jpg");

对少量图片的请求是没有问题的,但请求图像过多那就不行了。这时使用Volley框架,它实现了imageload,并提供了二级缓存。
或者使用联合OKHttp框架和其他图像处理框架。

4 OKHttp原理分析

OKHttp总体结构图如下图所示:

image

我们通过接口创建了请求Call的对象之后,选择同步或者异步的方式发出请求。主要通过Diaptcher不断从RequestQueuw中取出请求,如果以前请求过且本地的缓存没有被移除,即本地存有请求的cache,那么通过Cache结口直接从cahche获取数据,并返回Response,如果本地没有缓存,则通过NetWork接口向服务器发送请求,并返回Response。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值