在Okhttp之前有android-async-http它的内部使用HttpClient (google在android6.0已经移除了HttpClient),还有国内的Xutils最新的额Xutils3
还有2013年谷歌大会退出的Velloy 缺点是上传和下载大文件事它的弱项
Okhttp内部依赖一个square公司出品的网络请求的库(okio)现在已经被google使用在android的源码上面,可见其功能的强大
OKHTTP的简介:
okhttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,
通过链接池来减小相应的延迟,还有透明的GZIP压缩,请求缓存等优势,
其核心主要有路由,连接协议,拦截器,代理,安全性认证,连接池以及网络的适配,
拦截器主要是指添加,一处,或者转换请求,或者回应的头部信息
OKhttp支持的主要的功能:
1、联网 请求文本数据(GET,POST)
2、支持大问价的上传
3、大文件的下载
4、请求图片
个人总结使用okhttp的基本步骤:
/**
* 步骤:
* 1,得到OkHttpClient对象
* 2,得到一个请求 Requst请求
* 3,使用OkHttpClient对象 调用newCall()方法 将请求Requst请求转成Call任务
* 4,执行Call任务 (同步 异步)
*
* 更新Ui需要传递到主线程
*/
在build.gradle文件里面添加的依赖
compile 'com.squareup.okhttp3:okhttp:3.4.2'
okHttp的get用法简单的Demo:
OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new Request.Builder() .url("http://interfaces.ziroom.com/index.php?_p=api&_a=carousel") .addHeader("User-Agent","Apache-HttpClient/UNAVAILABLE (java 1.4)") .build(); final Call call = okHttpClient.newCall(request); //2,同步请求 // new Thread(){ // @Override // public void run() { // super.run(); // try { // Response response = call.execute(); // if(response.isSuccessful()){ // Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); // Log.e("AAA","==请求成功信息=>"+response.message()); // Log.e("AAA","==请求成功码=>"+response.code()); // Log.e("AAA","==请求成功数据=>"+response.body().string()); // Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); // // } // } catch (IOException e) { // e.printStackTrace(); // } // } // }.start(); //1,执行异步任务 //note:请求结果在子线程 //note:请求数据 执行一遍是有数据的 再次执行无数据 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //失败 } @Override public void onResponse(Call call, Response response) throws IOException { //成功 if(response!=null){ Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); Log.e("AAA","==请求成功信息=>"+response.message()); Log.e("AAA","==请求成功码=>"+response.code()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); } } });
okHttp的Post请求:
OkHttpClient okHttpClient = new OkHttpClient(); //FormEncodingBuilder body = new FormEncodingBuilder();//这是OkHttp 的用法 3有所改变 FormBody.Builder builder = new FormBody.Builder(); builder.add("pageNo","1"); builder.add("pageSize","20"); builder.add("serialIdes","2143,3404"); builder.add("v","4.0.0"); FormBody body = builder.build(); /* body.add("pageNo","1");这是OkHttp 的用法 3有所改变 body.add("pageSize","20"); body.add("serialIds","2143,3404"); body.add("v","4.0.0");*/ Request request = new Request.Builder() .url("http://mrobot.pcauto.com.cn/v2/cms/channels/1?") .post(body) .build(); Call call = okHttpClient.newCall(request); //2,同步请求 // new Thread(){ // @Override // public void run() { // super.run(); // try { // Response response = call.execute(); // if(response.isSuccessful()){ // Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); // Log.e("AAA","==请求成功信息=>"+response.message()); // Log.e("AAA","==请求成功码=>"+response.code()); // Log.e("AAA","==请求成功数据=>"+response.body().string()); // Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); // // } // } catch (IOException e) { // e.printStackTrace(); // } // } // }.start(); // //1,执行异步任务 //note:请求结果在子线程 //note:请求数据 执行一遍是有数据的 再次执行无数据 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { //成功 if(response!=null){ Log.e("AAA","==请求成功=>"+Thread.currentThread().getName()); Log.e("AAA","==请求成功信息=>"+response.message()); Log.e("AAA","==请求成功码=>"+response.code()); Log.e("AAA","==请求成功数据=>"+response.body().string()); Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength()); } } });