网络框架Retrofit2.0

上一篇学习了okhttp的入门篇,这一篇学习的retrofit底层默认使用的就是okhttp,相信大家多少也听过这个框架,下面我们就来一起学习下,讲真,学会之后这个框架用起来真的很爽,特别灵活。

按照习惯先来说一下它的优缺点

优点:

可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等

请求的方法参数注解都可以定制

支持同步、异步和RxJava

超级解耦

可以配置不同的反序列化工具来解析数据,如json、xml等

使用非常方便灵活

框架使用了很多设计模式(感兴趣的可以看看源码学习学习)

缺点:

不能接触序列化实体和响应数据

执行的机制太严格

使用转换器比较低效

只能支持简单自定义参数类型

相关学习资料的网址

retrofit官网:http://square.github.io/retrofit/

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

Simple HTTP with Retrofit2:

https://realm.io/news/droidcon-jake-wharton-simple-http-retrofit-2/

环境配置

在builde.gradle里面添加上

compile'com.squareup.retrofit2:retrofit:2.1.0'compile'com.squareup.retrofit2:converter-gson:2.1.0'compile'com.squareup.okhttp3:okhttp:3.4.1'

在AndroidManifest.xml添加所需权限

基本使用

 get异步请求



.baseUrl设置最基本url,也就是http请求的url前缀,可以把项目中重复的前缀用这个来设置

.addConverterFactory(GsonConverterFactory.create())是添加Gson数据解析ConverterFactory,后面会专门介绍下这个,这里就不做过多解释

ResponseBody这个是okhttp里面的对象,可以直接返回整个字符串,也可以获取流的形式

post异步请求

POST与GET实现基本上是一样的,只是把注解GET换成POST就OK.为了测试POST,专门去网上找了个接口测试,下面就分享给大家,既可以用GET也可以用POST请求

http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 ps:快递公司编码:申通="shentong"EMS="ems"顺丰="shunfeng"圆通="yuantong"中通="zhongtong"韵达="yunda"天天="tiantian"汇通="huitongkuaidi"全峰="quanfengkuaidi"德邦="debangwuliu"宅急送="zhaijisong"

拿着这个接口来实现一下POST异步请求




http://www.bejson.com/knownjson/webInterface/这网站里面还有一些其它免费接口,感兴趣的可以去看看

常用注解的使用介绍

上面GitHubService里面的注解大家应该都能猜它的作用了吧,下面就给大家介绍下

@GET和@POST分别是get和post请求。括号里面的value值与上面.baseUrl组成完整的路径

@Path动态的URL访问。像上面get请求中的{user}可以把它当做一个占位符,通过@Path("user")标注的参数进行替换

@Query请求参数。无论是GET或POST的参数都可以用它来实现

@QueryMap请求参数使用Map集合。可以传递一个map集合对象

@Body实体请求参数。顾名思义可以传递一个实体对象来作为请求的参数,不过实体属性要与参数名一一致

@FormUrlEncoded和@Field简单的表单键值对。两个需要结合使用,使用如下:

@FormUrlEncoded@POST("user/edit")Call updateUser(@Field("first_name") String first, @Field("last_name") String last);

@Multipart和@PartPOST表单的方式上传文件可以携带参数。两个需要结合使用,使用方式查看下面文件上传中介绍。

@PartMap和@PartPOST表单上传多个文件携带参数。两个结合使用,使用方式查看下面文件上传中介绍。

这里只介绍了一些常用的,大家如果想了解更多可以查看相关文档

文件上传

1、单文件上传携带参数(使用注解@Multipart和@Part),需要在手机SD卡目录下的Pictures文件夹下添加xuezhiqian.png图片

@Multipart@POST("UploadServlet")Call uploadfile(@Part MultipartBody.Part photo, @Part("username") RequestBody username, @Part("password") RequestBody password);

2、多文件上传携带参数(使用注解@PartMap和@Part),需要再在手机SD卡目录下的Pictures文件夹下添加xuezhiqian2.png图片

@Multipart@POST("UploadServlet")Call uploadfile(@PartMap Map params,  @Part("password") RequestBody password);

文件下载

可以采用OKHTTP下载文件的方式,利用ResponseBody对象,调用response.body().byteStream()方法获取InputStream输入流,通过写文件操作来实现。

同步请求和结合RxJava的使用

1、同步请求

Call.execute()同步请求网络,要注意的是Android4.0以后不能在主线程里调用,要开一个异步线程来使用,

Call.enqueue()异步请求网络,加入一个回调,同步异步需要可按照不同的场景来使用。

Call.cancel()取消此次请求,有一些场景还是会用到该方法的。

2、结合RxJava使用

@POST("query")Observable searchRx(@Query("type") String type, @Query("postid") String postid);


配置OKHttp


链接:https://www.jianshu.com/p/a94e38636fde

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 上一篇学习了okhttp的入门篇,这一篇学习的retrofit底层默认使用的就是okhttp,相信大家多少也听过这...
    肖赛Soaic阅读 24,099评论 14 105
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,404评论 25 707
  • 1. “你说年纪轻轻大好青年怎么那么想不开,非要谈恋爱。好好的发两年财好不好,好好的自己浪两年好不好。”对,这就是...
    七爷与七玥阅读 592评论 0 0
  • 打赏指下黑白健,心事无名也醉人。第一次真正喜欢上钢琴是听孩子大表姑为她弹奏的那段《水草舞》。这首极富感染力的乐曲选...
    叶如阅读 1,075评论 0 0
  • 一整个下午的光 砸在她身上 远处 一棵冬日里的梧桐静默着 仿佛在坚守一种,难以启齿的病症 老人推着轮椅,在小径上散...
    f3494c632b49阅读 940评论 46 49