快速Android开发系列网络篇之Retrofit.docx

快速Android开发系列网络篇之Retrofit.docx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Retrofi是t 一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎么实现的也不太敢用,不然出问题了就不知道怎么办了。这几天比较闲就下下来看了一下,了解一下大概实现方法,细节就不追究了。先来看一个官网的例子,详细说明去网官看 简单示例 首先定义请求接口,即程序中都需要什么请求操作 publicinterface GitHubService { @GET(/users/{user}/repos) ListRepolistRepos(@Path(user) String user); } 然后通过 RestAdapter 生成一个刚才定义的接口的实现类,使用的是动态代理。RestAdapter restAdapter = newRestAdapter.Builder() .setEndpoint() .build(); GitHubService service = restAdapter.create(GitHubService.class); 现在就可以调用接口进行请求了 ListRepo repos = service.listRepos(octocat); 使用就是这么简单,请求时直接调用接口就行了,甚至不用封装参数,因为参数 的信息已经在定义接口时通过 Annotatio定n 义好了。 从上面的例子可以看到接口直接返回了需要的Java类型,而不是 byte[或] Strin,g 解析数据的地方就是 Converter,这个是可以自定义的,默认是用 Gson 解析, 也就是说默认认为服务器返回的是 Json数据,可以通过指定不同的 Convert 使用不同的解析方法,如用 Jackson 解析Jso,n 或自定义XmlConvert解析 xml 数据。 Retrofi的t 使用就是以下几步: 定义接口,参数声明,Url都通过 Annotatio指n 定 通过 RestAdapter 生成一个接口的实现类(动态代理) 调用接口请求数据 接口的定义要用用 Rtrofi定t 义的一些 Annotatio,n 所以先看一下 Annotatio的n 。 Annotation 以上面的示例中的接口来看 @GET(/group/{id}/users) ListUsergroupList(@Path(id) int groupId); 先看@GET /** Make a GET request to a REST path relative to base URL. */ @Documented @Target(METHOD) @Retention(RUNTIME) @RestMethod(GET) public @interface GET { String value(); } @GET 本身也被几个Anotatio注n 解,@Target表示@GET 注解是用于方法的,value 方法就返回这个注解的 value值,在上例中就是/group/{id}/users,然后就是@RestMethod @Documented @Target(ANNOTATION_TYPE) @Retention(RUNTIME) public @interface RestMethod { String value(); boolean hasBody() defaultfalse; } RestMethod 是一个用于 Annotatio的n Annotatio,n 比如上面的例子中用来注解的 @GET ,value方法就返回 GET ,hasBody表示是否有Body,对于POST 这个方法就返回 true @Documented @Target(METHOD) @Retention(RUNTIME) @RestMethod(value = POST, hasBody = true) public @interface POST { String value(); } Retrofi的t Annotatio包n 含请求方法相关的@GET 、@POST 、@HEAD 、@PUT 、 @DELETA 、@PATCH ,和参数相关的@Path、@Field、@Multipart等。 定义了 Annotatio要n 就有解析它的方法,在 Retrofi中t 解析的位置就是 RestMethodInfo,但在这之前需要先看哪里使用了 RestMethodInfo,前面说了Retrofi使t 用了动态代理生成了我们定义的接口的实现类,而这个实现类是通过RestAdapter.create 返回的,所以使用动态代理的位置就是Res

文档评论(0)

mph + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体上海谭台科技有限公司
IP属地上海
统一社会信用代码/组织机构代码
91310115MA7CY11Y3K

1亿VIP精品文档

相关文档