概述
A type-safe HTTP client for Android and Java
官网上对Retrofit 的介绍就只有这么一句话,适用于Android和Java的类型安全的HTTP客户端,要使用retrofit 完成一个简单的请求也只需要了解使用一下的概念即可。
简单入门
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<ResponseBody> login(@Body LoginRequest loginRequest);
}
LoginRequest 为请求登录接口的所需的参数类,如果是使用 GET 方法则如下:
@GET("cardNum/{userId}")
Call<ResponseBody> 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<LoginResult> 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<LoginResult> call = api.login(loginRequestParam);
call.enqueue(new Callback<LoginResult>(){
@Override
public void onResponse(Response<LoginResult> response) {
LoginResult loginResult = response.body();
}
@Override
public voidonFailure(Throwable t) {
//请求失败处理
}
});