OKHttp使用详解及源码解析
2017-09-09 23:06
686 查看
本文转载自:http://blog.csdn.net/aiynmimi/article/details/51984716
OKHttp内部依赖Okio库,所以也要添加Okio库,最新版本为1.9.0:
②发送HTTP请求
GET请求
上面注释已经很清晰了,这里就不再做解释了!
这里需要注意的一点:
POST请求
这里需要注意的一点:在OKHttp3中在构建
③文件上传
文件上传,在构建RequestBody的时候:
这里需要注意的一个问题:OKHttp3中用于文件上传的
Android OkHttp完全解析 是时候来了解OkHttp了
http://blog.csdn.net/lmj623565791/article/details/47911083
Android 一个改善的okHttp封装库
http://blog.csdn.net/lmj623565791/article/details/49734867
OkHttp3源码分析[综述]
OkHttp3源码分析[复用连接池]
OkHttp3源码分析[缓存策略]
OkHttp3源码分析[DiskLruCache]
OkHttp3源码分析[任务队列]
有空再仔细研读一下源码!!!!
使用
①首先导入依赖,最新的版本是3.4.1,在gradle中:compile 'com.squareup.okhttp3:okhttp:3.4.1'1
OKHttp内部依赖Okio库,所以也要添加Okio库,最新版本为1.9.0:
compile 'com.squareup.okio:okio:1.9.0'1
②发送HTTP请求
GET请求
//得到OKHttpClient对象 OkHttpClient okHttpClient=new OkHttpClient(); //得到Request对象 Request request=new Request.Builder() .url("http://api.36wu.com/Weather/GetWeather?district=%E5%8C%97%E4%BA%AC") .build(); //OkhttpClient#newCall()得到Call对象 Call call=okHttpClient.newCall(request); //Call#enqueue()请求网络 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("fail",e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException{ Log.e("success",response.body().toString()); } }); }
上面注释已经很清晰了,这里就不再做解释了!
这里需要注意的一点:
onResponse回调的参数是
response,一般情况下,比如我们希望获得返回的字符串,可以通过
response.body().string()获取;如果希望获得返回的二进制字节数组,则调用
response.body().bytes();如果你想拿到返回的
inputStream,则调用
response.body().byteStream()
POST请求
OkHttpClient okHttpClient=new OkHttpClient(); //构建RequestBody对象,调用add()方法构建我们的键值对 RequestBody body=new FormBody.Builder() .add("district","%E5%8C%97%E4%BA%AC") .build(); //在构建Request对象时,调用post方法,传入RequestBody对象 Request request=new Request.Builder() .url("http://api.36wu.com/Weather/GetWeather") .post(body) .build(); Call call=okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("fail",e.toString()); } @Override public void onResponse(Call call, Response response) throws IOException { Log.e("success",response.body().toString()); } }); }
这里需要注意的一点:在OKHttp3中在构建
RequestBody对象时,已使用
FormBody代替了之前的
FormEncodingBuilder,这里需要注意一下!
③文件上传
文件上传,在构建RequestBody的时候:
OkHttpClient okHttpClient=new OkHttpClient(); File file = new File(Environment.getExternalStorageDirectory(), "test.txt"); RequestBody body = RequestBody.create(MediaType.parse("application/octet-stream"), file); RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addPart(Header对象,body) //.addFormDataPart("XXX","XXX",body) .build(); Request request = new Request.Builder() .url("XXXX") .post(requestBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback(){ });
这里需要注意的一个问题:OKHttp3中用于文件上传的
MultipartBody,代替了之前的
MultipartBuilder,用法也稍微的不一样,需要注意!
封装
参考一下鸿洋大神的一个对OKHttp的封装:Android OkHttp完全解析 是时候来了解OkHttp了
http://blog.csdn.net/lmj623565791/article/details/47911083
Android 一个改善的okHttp封装库
http://blog.csdn.net/lmj623565791/article/details/49734867
源码分析
在简书上看到一个系列的博客,讲的比较细致清晰,分享一下,包括综述、复用连接池、缓存策略、DiskLruCache和任务队列等5个部分:OkHttp3源码分析[综述]
OkHttp3源码分析[复用连接池]
OkHttp3源码分析[缓存策略]
OkHttp3源码分析[DiskLruCache]
OkHttp3源码分析[任务队列]
有空再仔细研读一下源码!!!!
相关文章推荐
- OKHttp使用详解及源码解析
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- [Android]Toolbar使用详解(三)——源码解析
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- Picasso使用详解及源码解析
- 61.Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- Okhttp3使用 + 源码完全解析
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
- Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- Scala深入浅出进阶经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析
- [置顶] Android 网络框架之Retrofit2使用详解及从源码中解析原理
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
- 使用详解及源码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
- VC使用ADO连接Oracle数据库详解(含源码下载)
- linux ssh 使用深度解析(key登录详解)
- phoengap源码解析——插件机制,java和js代码互调用详解
- linux ssh 使用深度解析(key登录详解)
- linux ssh 使用深度解析(key登录详解)