关于Retrofit
- A type-safe HTTP client for Android and Java
- 一个针对Android和Java类型安全的http客户端
- 目前版本2.0.0
- 这是官网地址: retrofit
- github地址:retrofit
通俗理解Retrofit
我们来通俗的理解Retrofit,它是一个可以用于Android和java的网络库,使用它可以简化我们网络操作的工作,提高效率和正确率。我们需要牢牢的记住:所有的第三方库能实现的功能,我们使用原生的API只要花时间和精力也能实现,但是可能会出现很多的bug而且会花费较多的时间和精力,而且性能也不一定很好,第三方的库会帮我们封装底层的一些代码,避免我们做重复多余易出错的事情,让我们专注于业务逻辑,所以学习任何一个第三方库都将是简单的,我们不应心生畏惧。
那么,同样的道理,Retrofit是Square公司开源的一个高质量高效率的http库,它将我们自己开发的底层的代码和细节都封装了起来。在没有Retrofit,okHttp等库的时候,我们可能要自己去写put,get,post,delete请求。但有了这些库之后对于这些请求我们就只需要一行代码或者是一个注解。
所有的网络通信,其核心任务只有一个就是:Client端与Server端进行数据的交互和操作。所以Retrofit就将底层的代码都封装起来只是暴露出了我们业务中的数据模型和操作方法。
这样理解之后,我们学习Retrofit就简单明了很多了。应该从以下这几点开始学习:
- 如何传入我们业务需求的URL以及变量参数
- 如何将我们业务中从服务器获取的Jason数据封装为与Retrofit向对应的类或者接口
- 如何使用Retrofit进行get,post,delete,put等操作。
- 还有就是如何在我们项目中配置Retrofit
Retrofit特性
- 将rest API封装为java接口,我们根据业务需求来进行接口的封装,实际开发可能会封装多个不同的java接口以满足业务需求。(注意:这里会用到Retrofit的注解:比如get,post)
- 使用Retrofit提供的封装方法将我们的生成我们接口的实现类,这个真的很赞,不用我们自己实现,通过注解Retrofit全部帮我们自动生成好了。
- 调用我们实现类对象的接口方法。
这样写都太抽象了,看一段代码:
看一个Retrofit的例子
第一步:将Rest API转换为java接口
<pre>
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
// you can add some other meathod
}
</pre>
解释:这里的Rest API是指服务器端的API,一般会暴露get,post方法
GitHubService其实是对Rest API的一个映射关系,在实际开发中,我们可以定义:public interface ClientService,里面包含post ,get 方法。
接口中的方法使用了Retrofit的注解,Retrofit这个库给了我们很多注解,下一节详细介绍
listRepos这个方法表示:一个get请求获取给定URL的Repo集合。
listRepos传入的参数为我们需要get的url的动态部分。
这里的Repo为我们自己定义的java bean的类:Repo.class用于封装获取的Jason数据。//注意:此处Retrofit又帮我们省掉了很多工作,只需要我们自己定义业务对应的实体类,而Jason数据的转换和封装则帮我们封装好了只需我们调用。
第二步Retrofit会帮我们自动生成接口的实现类的实例,代码如下:
<pre>
Retrofit retrofit = new Retrofit.Builder() //01:获取Retrofit对象
.baseUrl("https://api.github.com/") //02采用链式结构绑定Base url
.build();//03执行操作
GitHubService service = retrofit.create(GitHubService.class);//04获取API接口的实现类的实例对象
</pre>
解释:
短短的两行代码解决了很多问题
先获取Retrofit对象并绑定基本参数,设置基本配置
一行代码生成API接口的实例对象
第三步:调用接口中定义的业务方法:get post等:
<pre>
Call<List<Repo>> repos = service.listRepos("octocat");
</pre>
解释:调用接口实现类实例的方法,获取服务器上的数据解析存在List<Repo>中。
小结:Retrofit的使用大体上就分这三步走,接下来就是在开发中去熟悉Retrofit的各种注解了。
涨姿势
Retrofit默认是Gson来解析JSON数据,你也可以设置自己的JSON解析器,比如jackson,可以使用以下代码换成别的解析方式:
<pre>
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create()) //使用工厂模式创建Gason的解析器
.build();
GitHubService service = retrofit.create(GitHubService.class);
</pre>jsonschema2pojo这是一个工具:可以将Jason数据转换为java.class,可以很快的生成我们的数据模型,比如User.java,gitmodel.java
配置:Gradle下
<pre>
compile 'com.squareup.retrofit2:retrofit:2.0.0'
</pre>Retrofit requires at minimum Java 7 or Android 2.3.
扩展阅读
- 这里有完整的demo步骤:Retrofit开发指南
- 来自Jake wharton的演讲: 用 Retrofit 2 简化 HTTP 请求用 Retrofit 2 简化 HTTP 请求
- Retrofit 中文文档
- 快速Android开发系列网络篇之Retrofit
- Android和Java的REST接口调用封装类库:Retrofit
关注我