初识Retrofit2.0

  • 时间:
  • 浏览:0

1.Retrofit简介

Retrofit无疑是当下最流行的Android网络请求框架了,是Square提供的开源产品。官方网站是只是 介绍Retrofit的—-A type-safe HTTP client for Android and Java,为Android平台的应用提供一一三个白 多类型安全的HTTP客户端。Retrofit 是一套注解形式的网络请求封装库,它的强大在于让代码型态更加清晰,它可不还要直接解析JSON数据变成JAVA对象,支持回调操作,处置不同的结果。

服务器返回的很常见的一种生活数据类型,jsonobject对象里边包括一一三个白 多jsonarray数组,数组里边包括统统jsonobject对象。你这名 人还要拿到的只是 哪些jsonobject里的id与name的。看看定制的javabean该为什么在写:

你这名 地方保持不变即可

请求网络数据的前一天,以上是还要变化的地方,你这名 的地方保持不变。

5.简单封装

与之对应的User实体类为:

这里具体参数以服务器要求而定

单例模式构建的一一三个白 多ApiWrapper,只是 就不会每次请求网络数据的前一天去构建一一三个白 多retrofit,使用的前一天也很方便:

retrofit在使用过程中,还要定义一一三个白 多接口对象,@GET标识为get请求,@GET中所填写的value值和baseUrl组成全部的路径,baseUrl在构造retrofit对象时给出。@QueryMap 标识为接口查询的关键字,这里还要的参数有一三个白 多,统统我使用了@QueryMap,与下面一种生活写法是等价的:

加带依赖:

在AndroidStudio的项目中,在build.gradle文件中加带以下引用:

Retrofit 2.0支持在每个请求法律方法的里边加带注解进行设置header:

Retrofit的构建使用的是构造者模式,指定一一三个白 多baseUrl,加带一一三个白 多对象转换器,用于将服务器返回的数据转加带对应实体类对象。构造完成前一天,调用create法律方法就可不还要拿到你这名 人的接口实例。但会 再调用你这名 人前一天定义好的获取城市的法律方法,得到一一三个白 多call对象,通过call.enqueue即可完成异步的网络请求。最后在数据请求成功的前一天,通过response.body()即可拿到你这名 人定义在Call< T >中还要返回的对象,数据请求失败的前一天,进行异常的处置。

3.基本使用

设置连接超时以及读取超时,但会 将你这名 人设置的拦截器加带进来。最后记得调用Retrofit.Builder()的.client(okHttpClient)法律方法,将你这名 人可能设置好的okHttpClient关联好。

其中{id}可不还要理解为占位符,实际使用中会通过@Path注解对所标注的参数进行替换:

这里有你这名 还要特别注意的是:保证你这名 人定制的javabean对象的字段要和服务器返回的数据字段一一对应,不然解析会出错

3.设置连接与读取超时

一种生活写法很好理解,将FieldMap拆分成了一三个白 多Field

2.统一设置headers

3.动态请求url

请求城市的url:

http://111.111.1.11/Base/getCities/id/?clientVersion=201002&version=1622

只是 其中的userId是动态变化的,请求法律方法为post,请求参数不变。这麼 你这名 人的url也要进行变化:

1.设置打印拦截器

2.post请求

同样是里边的url,可能改为post请求,要求提交的参数有一三个白 多,userId:1001,userName:kaikai,只是 们应该如保实现呢:

HttpLoggingInterceptor 是一一三个白 多拦截器,用于输出网络请求和结果的 Log,可不还要配置 level 为 BASIC / HEADERS / BODY,查看源码它们级别依次是:

感觉一种生活请求法律方法灵活性全部都是很高,还要通过传参来构造一一三个白 多参数对象。这麼 @FormUrlEncoded 与 @FieldMap一种生活法律方法灵活。

@POST标识为post请求,@FormUrlEncoded 与 @FieldMap注解结合表示以表单的法律方法传递键值对,与下面你这名 种写法是等价的:

Retrofit的灵活与强大远不止哪些,比如设置网络缓存,管理cookie,自定义转换器等,前一天项目中含用到的地方再更新博客。

4.常用配置

1.get请求

请求城市数据的url为:

http://111.111.1.11/Base/getCities?clientVersion=201002&version=1622

请求法律方法为get,请求参数为clientVersion与version,请求数据为城市的id与name,这麼 使用Retrofit完成数据请求的流程如下:

但会 只是 的麻烦之处只是 每次请求都得加带,统统全部都是了以下的法律方法:

2.准备工作

@Body注解标识的是你这名 人的post参数对象,在使用的前一天是:

这里你这名 人选折 BODY即可,会打印出网络请求的url,头部信息headers,返回数据bodies所有信息

接口中的法律方法还要要有返回值,这里将你这名 人定制的javabean对象传进去即可。

你这名 的代码与前面的保持一致即可。

首先加带依赖,进行log的打印

首先加带以上引用,这里除了gson以外,还有你这名 的选折 。Retrofit自动转化的核心只是 根据服务器返回的json数据定制一一三个白 多javabean,举个例子:

数据准备:

使用okhttp请求网络数据的前一天,你这名 人还要把服务器返回的JSON数据手动转加带你这名 人的Java对象。而在上文你这名 人提到,Retrofit可不还要直接解析JSON数据变成JAVA对象,这也是Retrofit灵活与强大的体现。看看为什么在实现的