一、概述

  OkHttp是Square公司开发的一款服务于android的一个网络框架,主要包含:

  • 一般的get请求
  • 一般的post请求
  • 基于Http的文件上传
  • 文件下载
  • 加载图片
  • 支持请求回调,直接返回对象、对象集合
  • 支持session的保持

  github地址:https://github.com/square/okhttp

二、Http请求

   对于一个Http请求,分为几个步骤:

  1. 创建一个OkhttpClient对象,建议全局只使用一个OkhttpClient 

    OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build;

  2. 创建一个Request对象,包含请求的url地址,请求的方式是get或者post,以及请求的内容
  3. 通过OkhttpClient创建一个newCall,将request包含于其中,类似于将你的request请求封装成了任务
  4. call的执行,有两种执行方式。一种是加入调度队列,call.enqueue,即异步执行call。一种是立即执行,call.execute,即同步执行,会阻塞线程直到请求完成。
  5. 最后就是执行之后的回调函数,注意如果是执行enqueue(),则回调函数不在主线程,如果要执行更新UI界面应将数据通过handler传回主线程
     1 call.enqueue(new Callback(){
     2             @Override
     3             public void onFailure(Call call, IOException e)
     4             {
     5                //执行失败回调函数,call及请求的引用
     6             }
     7
     8             @Override
     9             public void onResponse(Call call, Response response) throws IOException
    10             {
    11                     //请求成功,获得response,可以通过调用response.body().string()获得服务器返回的数据。response.code()获得请求的状态代码
    12             }
    13 });
    14     

    以下是完整的get请求实例代码:

 1 //创建okHttpClient对象
 2 OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build;
 3 //创建一个Request
 4 final Request request = new Request.Builder()
 5                 .url("https://github.com/hongyangAndroid")
 6                 .build();
 7 //new call
 8 Call call = mOkHttpClient.newCall(request);
 9 //请求加入调度
10 call.enqueue(new Callback()
11         {
12             @Override
13             public void onFailure(Request request, IOException e)
14             {
15             }
16
17             @Override
18             public void onResponse(final Response response) throws IOException
19             {
20                     //String htmlStr =  response.body().string();
21             }
22         });             

三、RequestBody

  对于不同的请求,如get、post、文件上传等等,我们只要构造不同的Request即可。

  1. Get请求,我们可以直接在url里面添加要传递的数据即可

    Request request = new Request.Builder().url("https://github.com/hongyangAndroid").build();

  2. Post请求
    //构建一个表单RequestBody,在里面添加要传递的字段数据
    RequestBody requestBody = new FormBody.Builder().add("userName",userName).add("passwd", passwd).build();
    //将RequestBody传递给Request的Post
    Request request = new Request.Builder().url(url).post(requestBody).build();

  3. 带参数的文件上传
    //建立文件上传请求
    File file = new File(Environment.getExternalStorageDirectory(), "balabala.mp4");
    RequestBody fileRequest = RequestBody.create(MediaType.parse("application/octet-stream"), file);
    //建立表单请求
    RequestBody formRequest = RequestBody.create(null,"xxxx);//使用MultipartBody将两个RequestBody合在一起
    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBuilder.FORM).addPart(Headers.of("Content-Disposition", "form-data; name=\"username\""), formRequest).addPart(Headers.of("Content-Disposition", "form-data; name=\"mFile\"; filename=\"wjd.mp4\""), fileRequest).build();

四、cookie持久化

  OkHttp提供了非常方便的Cookie管理方法,只要重写一个CookieJar类即可管理Cookie。

 private static OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {private final ArrayList<Cookie> cookieStore = new ArrayList<Cookie>();@Overridepublic void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {//当获得一个Response时,会调用这个方法来存储Cookie
            cookieStore.addAll(list);}@Overridepublic List<Cookie> loadForRequest(HttpUrl httpUrl) {//当要call一个Request时,会调用这个方法来为请求的head添加cookieList<Cookie> cookies = cookieStore;return cookies != null ? cookies : new ArrayList<Cookie>();}}).build();        

转载于:https://www.cnblogs.com/yesphet/p/5329587.html

Android网络框架-OkHttp3.0总结相关推荐

  1. Android 网络框架 Retrofit2.0介绍、使用和封装

    前言 时至今日,Android的网络框架不再像之前那么到处都是,随着Google把 HttpClient直接删掉,似乎意味着Android越来越成熟.网络框架中的佼佼者Volley也不再那么光鲜,取而 ...

  2. Android网络框架okhttp3简单封装

    1:在demo得build文件中添加依赖(这里以3.8.1版本为例) dependencies {compile 'com.squareup.okhttp3:okhttp:3.8.1' } 2:对网络 ...

  3. Android网络框架OK3,Android网络框架---OkHttp3

    1 public class MainActivity extendsAppCompatActivity {2 3 @Override4 protected voidonCreate(Bundle s ...

  4. NoHttp开源Android网络框架1.0.0之架构分析

    转载于:https://www.cnblogs.com/brucemengbm/p/7091521.html

  5. android网络框架

    https://www.zhihu.com/question/35189851 个人比较推荐Square开源组合,用Retrofit(目前已经是2.0+)+OkHttp基本上已经可以处理任何业务场景了 ...

  6. ym—— Android网络框架Volley(终极篇)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看 Android网络框架Volley(体验篇) ...

  7. Android单元测试框架Robolectric3.0介绍(一)

    Android单元测试框架Robolectric3.0介绍(一) 作者 geniusmart 关注 2016.01.21 00:37* 字数 1550 阅读 18265评论 55喜欢 124赞赏 2 ...

  8. Android网络框架Volley项目实战-刘桂林-专题视频课程

    Android网络框架Volley项目实战-5257人已学习 课程介绍         使用Google 2013 I/O大会上发布的Volley请求框架做几个实战项目,归属地查询,QQ测试吉凶,天气 ...

  9. Android 网络框架_常用的网络框架

    看了张哥(stormzhang)的博客之后,深有感触,又让我感慨了一番,而且发现张哥的博客英文跟汉字之间是有空格的,数字跟汉字之间也有空格,看起来很舒服很美观,张哥真的是把每一个细节都做的很好,所以身 ...

最新文章

  1. CodeForces - 632E Thief in a Shop 完全背包
  2. osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib
  3. 2362:Square 能否拼接为正方形 . DFS+回溯
  4. Qt工作笔记-QML界面与QWidgets界面相互交互
  5. 查找学生链表c语言,【查找链表面试题】面试问题:C语言实现学生… - 看准网...
  6. 信息安全系统设计基础实验四:外设驱动程序设计
  7. vue 局部回到顶部_vue中回到顶部
  8. html把中文转成英文,html转换中英文
  9. 解决浏览器 fakepath 实现图片上传预览
  10. 超火的微信渐变国旗头像,一键生成!!
  11. 自定义打卡签到view
  12. python数独代码_Python 解数独(Sudoku)
  13. 校运动会管理系统报告C语言,校运动会管理系统的报告C语言(含完整代码).doc
  14. 2021最新chrome浏览器与chromedriver版本对照表
  15. 交换机与二层转发原理
  16. ipad和android平板应用程序,安卓平板相比iPad有哪些优势和劣势?
  17. linux配置网卡绑定后不生效,Linux双网卡绑定实现负载均衡和失效保护
  18. 小程序配置域名访问出现ios可以正常访问但是android无法正常访问的问题排查
  19. 合振动的初相位推导_如何确定合振动的初相位
  20. 已知函数e ​x ​​ 可以展开为幂级数1+x+x ​2 ​​ /2!+x ​3 ​​ /3!+⋯+x ​k ​​ /k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e ​x ​​ 的近似值,求和

热门文章

  1. 旺铺免费,淘宝的义务不能免
  2. Oracle中PL/SQL的循环语句
  3. 爱情神话:庄妃用美色套牢洪承畴之谜
  4. 36晋级12第五场:冯志刚决胜入围(节目视频)
  5. Anaconda3 离线安装 Django-3.2.7 及依赖项setuptools、sqlparse 、asgiref、typing_extensions等模块
  6. static interface method calls are not supported at language level 1.6
  7. 如何在vsc上选择远程miniconda特定的虚拟环境中的Python解释器(4步)
  8. 神经网络基础知识梳理
  9. UI设计培训分享:平面广告设计中的文案表达技巧
  10. python值得报班学习吗