一、前言自从Android4.4开始,google已经开始将源码中的HttpURLConnection替换为OkHttp,而在Android6.0之后的SDK中google更是移除了对于HttpClient的支持,而市面上流行的Retrofit同样是使用OkHttp进行再次封装而来的。由此看见学习OkHttp的重要性。 本篇文章是以当前最新的版本 3.5.0为例(2.0及以上版本版本与3.0以上版本存在较大差异,本文不做深入讨论,请自行百度),使用Android Stuido作为开发环境,带领大家简单的熟悉OKHttp的使用情况。作为《Android网络编程》系类文章之一,后面的文章会围绕OKHttp3做逐渐深入的探讨。这篇文章我们要达到的目的就是:不深究,简单明了,可以直接粘贴复制。 二、使用前的准备2.1 官方文档要知道学习一门新技术,最好的资料永远是官方文档: 2.2 Android Studio 配置gradle环境:compile 'com.squareup.okhttp3:okhttp:3.5.0'compile 'com.squareup.okio:okio:1.11.0' 2.3 添加网络权限不要忘记添加权限啊,这也是常常被开发忽略的地方
三、使用教程3.1 Http Get3.1.1 异步的Get在Http请求中最常见的就是get方法了,在大多数的使用场景中,我们使用的都是异步的Get请求,下面我们就是用OkHttp的异步Get去请求一下百度的首页。 // step 1: 创建 OkHttpClient 对象 OkHttpClient okHttpClient = new OkHttpClient(); // step 2: 创建一个请求,不指定请求方法时默认是GET。 Request.Builder requestBuilder = new Request.Builder().url('http://www.baidu.com'); //可以省略,默认是GET请求 requestBuilder.method('GET',null); // step 3:创建 Call 对象 Call call = okHttpClient.newCall(requestBuilder.build()); //step 4: 开始异步请求 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // TODO: 17-1-4 请求失败 } @Override public void onResponse(Call call, Response response) throws IOException { // TODO: 17-1-4 请求成功 //获得返回体 ResponseBody body = response.body(); } }); 以上就是发送一个异步的Get请求的主要步骤。首先我们要创建一个 Request.Builder()链式编程,在此不做探讨 接下来我们就要将 最后,我们希望以异步的方式去执行请求,所以我们调用的是call.enqueue,将call加入调度队列,然后等待任务执行完成,我们在Callback中即可得到结果。但要注意的是,call的回调是子线程,所以是不能直接操作界面的。使用时需要自行处理。当请求成功时就会回调 ResponseBody 的 API
让我们实现一下吧:
3.1.1 同步的Get当然 3.2 异步的Http Post在看过了 3.2.1 Post 上传键值对 //step 1: 同样的需要创建一个OkHttpClick对象 OkHttpClient okHttpClient = new OkHttpClient(); //step 2: 创建 FormBody.Builder FormBody formBody = new FormBody.Builder() .add('name', 'dsd') .build(); //step 3: 创建请求 Request request = new Request.Builder().url('http://www.baidu.com') .post(formBody) .build(); //step 4: 建立联系 创建Call对象 okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // TODO: 17-1-4 请求失败 } @Override public void onResponse(Call call, Response response) throws IOException { // TODO: 17-1-4 请求成功 } }); 是不是和 3.2.2 Post异步上传文件直接上代码
当然这里需要添加权限滴,你是不是忘记了呢。 <uses-permission android:name='android.permission.READ_EXTERNAL_STORAGE'/> <uses-permission android:name='android.permission.WRITE_EXTERNAL_STORAGE'/> 第一步与之前都相同,但是从第二步开始就用了一定的差异了。在step2 中我们需要通过
其实MIME文件类型特批多,有兴趣的朋友可以可参见w3school上的MIME 参考手册。 上传类型 在创建 总结经过上面的介绍我相信大家对OkHttp简单使用有了一定的了解,OkHttp3使用起来是不是很简单呢,但是每一次请求的步骤都有着大量重复的地方,这要是在实际开发中,还不把人累着啊,本着节约开(tou)发周(lan)期的目的,咳咳,后面的文章会进一步的带领大家学习OkHttp3的高级用法和OkHttp工具类的封装哦,敬请期待。 参考: (原文地址:http://www.jianshu.com/p/7d88613c0b0f) |
|