简介
它是一个可以用于Android和java的网络库,使用它可以简化我们网络操作的工作,提高效率和正确率。其核心任务只有一个就是:Client端与Server端进行数据的交互和操作。所以Retrofit就将底层的代码都封装起来只是暴露出了我们业务中的数据模型和操作方法。这样理解之后,我们学习Retrofit就简单明了很多了。应该从以下这几点开始学习:
1.如何传入我们业务需求的URL以及变量参数
2.如何将我们业务中从服务器获取的Jason数据封装为与Retrofit向对应的类或者接口
3.如何使用Retrofit进行get,post,delete,put等操作。
4.还有就是如何在我们项目中配置Retrofit特性
1.将rest API封装为java接口,我们根据业务需求来进行接口的封装,实际开发可能2.会封装多个不同的java接口以满足业务需求。(注意:这里会用到Retrofit的注解:比如get,post)
3.使用Retrofit提供的封装方法将我们的生成我们接口的实现类,这个真的很赞,不用我们自己实现,通过注解Retrofit全部帮我们自动生成好了。调用我们实现类对象的接口方法。Demo
1.工程中配置compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包 compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包 compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
PS:这里需要值得注意的是导入的retrofit2包的版本必须要一致,否则就会报错
2.创建retrofit对象Retrofit retrofit = new Retrofit.Builder() .baseUrl("Https://api.douban.com/") //增加返回值为String的支持 .addConverterFactory(ScalarsConverterFactory.create()) //增加返回值为Gson的支持(以实体类返回) .addConverterFactory(GsonConverterFactory.create()) //增加返回值为Oservable<T>的支持 .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build();
addConverterFactory添加将要定义的接口函数的返回类型
3.将Rest API转换为java接口public interface GitHubService { //对应2中的GsonConverterFactory @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); //对应2中的ScalarsConverterFactory @GET("users/{user}/repos") Call<String> listRepos(@Path("user") String user); //对应2中的RxJavaCallAdapterFactory @GET("users/{user}/repos") Observable<Repo> listRepos(@Path("user") String user); }
4.创建接口对象
GitHubService service = retrofit.create(GitHubService.class);//获取API接口的实现类的实例对象
5.调用接口
Call<List<Repo>> repos = service.listRepos("octocat");
- 注解
Retrofit提供的请求方式注解有@GET和@POST,参数注解有@PATH和@Query等,我们只介绍常用的;前两个顾名思义就是定义你的请求方式Get or Post,后面的@PATH指的是通过参数填充完整的路径,一般用法:
@GET("{name}")
Call<User> getUser(@Path("name") String name);
这里的参数username会被填充至{name}中,形成完整的Url请求地址,{name}相当于一个占位符;
@POST("mobileLogin/submit.html")
Call<String> getString(@Query("loginname") String loginname,
@Query("nloginpwd") String nloginpwd);
这里@Query("loginname")就是键,后面的loginname就是具体的值了,值得注意的是Get和Post请求,都是这样填充参数的;