原文出处于此,我想再也找不到如此详细的用法详解了,涵盖使用代码示例、使用示例的视频、课件。
我这里仅仅只把课件展示出来,如果有需要看代码或者视频学习的小伙伴,可以自行点击。
原文作者在使用retrofit编写基本的client端代码之前,先使用LoopBack搭建一个用于测试的api server,这一步不太清楚的同学可以去LooBack官网查阅一下,视频里也是粗略的有提到而已。
那么以下就是原作的课件了,当然,有部分是我在过程中补充的一些我的笔记,看看就好:
利用LoopBack搭建好一个api server之后,我们会在浏览器中看到一个如下图所示的界面:
(由于原作的课件之中,这张截图始终无法显示,所以我猜测原作应该是想要把这张图放出来,给大家展示一下LoopBack搭建好一个api server是什么样子的,所以我去视频里把这张图截下来了,希望没有截错 ...)
在图中可以看到很多形式的api接口, 如POST GET PUT DELETE HEAD, 我们可以利用这些api测试我们android的代码。
现在,我们实现一个基本的rest api访问功能。
第零步,编写正式的代码前, 我们需要做一些准备工作。 首先,我们需要在项目中引入retrofit类库, 因为我是用android studio来开发,所以需要在主module的build.gradle文件中加入retrofit的依赖, 在dependencies节点中加入如下代码:
compile 'com.squareup.retrofit:retrofit:1.9.0'
同步一下gradle,会发现在项目的External Libraries中已经存在retrofit的类库了。
我们还需要做的另外一个配置是在清单文件中加入网络访问的权限。
第一步, 我们需要实现一个和server端CoffeeShops Model相对应的java实体类, 我们取名为CoffeeShop, (理论上如果害怕麻烦的话,可以直接将java实体类与server端一一对应,但也可仅仅取出所需字段),代码如下:
public class CoffeeShop extends BaseHttpModel {
public int id;
public String name;
public String brand;
public String made_in;
}
我这里补充一个截图,server端CoffeeShops Model有如下字段:
BaseHttpModel类代码:
public class BaseHttpModel {
//方便打印返回数据
@Override
public String toString() {
return new Gson().toJson(this);
}
}
第二步,我们需要写一个接口,这个接口里的方法和服务器端的api一一对应:
public interface LoopBackService {
@POST("/CoffeeShops")
void postCoffeeShop(@Body CoffeeShop coffeeShop, Callback<CoffeeShop> cb);
@GET("/CoffeeShops")
void getCoffeeShop(Callback<List<CoffeeShop>> cb);
@PUT("/CoffeeShops")
void putCoffeeShop(@Body CoffeeShop coffeeShop, Callback<CoffeeShop> cb);
@DELETE("/CoffeeShops/{id}")
void deleteCoffeeShop(@Path("id") int id, Callback<Object> cb);
}
第三步, 我们需要实现一个Client类, 这个类可以返回一个第二步接口的一个实例
public class RestClient {
private static LoopBackService service;
private RestClient() {};
public static LoopBackService getService() {
if (null == service) {
service = new RestAdapter.Builder()
.setEndpoint(Config.API_HOST)
.setLogLevel(RestAdapter.LogLevel.FULL)
.build()
.create(LoopBackService.class);
}
return service;
}
}
观察上面的代码,我们使用单例来保证程序中只存在一个service的实例, 这里并没有考虑线程安全,因为我觉得这里并不需要考虑子线程调用的问题。
好,到这里,一个基本的api访问的代码已经编写完毕, 剩下的工作就是使用我们上面三步的代码来访问api数据。
我们在LoopBackService接口里写了4个方法, 我们在界面上相对应的放置4个按钮,来分别实现访问这4个api的动作。
完整的代码示例,可自行下载查看。