android 网络通信(三):Retrofit 2.0 的使用

概述

A type-safe HTTP client for Android and Java

官网上对Retrofit 的介绍就只有这么一句话,适用于Android和Java的类型安全的HTTP客户端,要使用retrofit 完成一个简单的请求也只需要了解使用一下的概念即可。


android 网络通信(三):Retrofit 2.0 的使用_第1张图片
image.png

简单入门

1、添加Retrofit 依赖包

compile 'com.squareup.retrofit2:retrofit:2.3.0'

2、创建一个Retrofit 实例

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://121.8.250.xx:20012/api/")
    .build();

通过new 一个builder 后传入请求的 url,传入的这个URL 必须以 "/" 结尾或者这个URL 隐含的路径就是根目录"/",例如 https://api.github.com。

3、创建一个管理请求的接口类

public interface APIService {
     //登陆
    @POST("service")
    Call  login(@Body LoginRequest loginRequest);
}

LoginRequest 为请求登录接口的所需的参数类,如果是使用 GET 方法则如下:

@GET("cardNum/{userId}")
Call getUserCardNum(@Path("userId") int userId);

这两个例子获得的返回结果都在 ResponseBody 中,通过response.body().string() 可以打印出返回结果,这样处理比较麻烦,可以根据返回结果创建一个对应的POJO 类来接收返回结果,只需要在创建retrofit 时设置对应的ConvertFactory:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://121.8.250.xx:20012/api/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

在dependencies 中添加依赖:

compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'

上面的登录请求更改为:

public interface APIService {
    //登陆
    @POST("service")
    Observable login(@Body LoginRequest loginRequest);
}

POJO 类的创建可以直接在 AS 中安装 GSONFormat 插件, 把请求得到的json 数据贴进去就可以生成对应的 POJO 类了

public class LoginResult {

    private String userName,
                   customerId,
                   resp_msg,
                   tranCode,
                   shopName,
                   resp_code;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public String getResp_msg() {
        return resp_msg;
    }

    public void setResp_msg(String resp_msg) {
        this.resp_msg = resp_msg;
    }

    public String getTranCode() {
        return tranCode;
    }

    public void setTranCode(String tranCode) {
        this.tranCode = tranCode;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    public String getResp_code() {
        return resp_code;
    }

    public void setResp_code(String resp_code) {
        this.resp_code = resp_code;
    }
}

4、接口调用

APIService api = retrofit.create(APIService .class);
Call call = api.login(loginRequestParam);

call.enqueue(new Callback(){  
           @Override  
           public void onResponse(Response response) {  
               LoginResult loginResult = response.body();
            }  
            @Override  
            public voidonFailure(Throwable t) {  
               //请求失败处理  
           }  
       });

你可能感兴趣的:(android 网络通信(三):Retrofit 2.0 的使用)