how to use retrofit

使用retrofit编写基本的client端代码

利用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, 代码如下

public class CoffeeShop extends BaseHttpModel {
    public int id;
    public String name;
    public String brand;
    public String made_in;
}

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的动作

具体的代码在这里就不贴了,参见源码及教程视频