Retrofit
依赖
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
定义一个请求接口
public interface MeituService {
@GET("/users/{user}")
Call<User> getUser(@Path("user") String userName);
}
使用Retrofit 生成这个接口实例,每个接口的方法都返回一个Call,每个Call只能被调用一次,可以调用clone()拷贝生成新的Call
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
GithubService githubService = retrofit.create(GithubService.class);
// Call的泛型实参是请求返回的实体
Call<User> userCall = githubService.getUser("patrick-iv");
try {
Response<User> response = userCall.execute();
} catch (IOException e) {
e.printStackTrace();
}
用注解描述HTTP请求
- 注解描述请求方法和依赖的URL,描述请求方法的注解有5种GET, POST, PUT, DELETE, and HEAD (@GET)
@GET("users/list?sort=desc")
- URL支持参数替换和查询参数 (@QUERY,@PATH)
// {}中参数可以被方法中的同名参数替换,参数名须由数字/字母组成
@GET("/users/{user}")
Call<User> getUser(@Path("user") String userName);
// 添加参数user
@GET("/users")
Call<User> getUser(@Query("user") String userName);
// 多个参数时可以用Map
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
- 支持对象作为请求体(@Body)
@POST("users/new")
Call<User> createUser(@Body User user);
- 请求头(@Headers,@Header)
// 设置静态请求头,重复的Header不会被删除
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
// 用参数设置请求头,value为空时该请求头会被删除,value会自动被调用toString
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
CONVERTERS
Retrofit默认只能返回ResponseBody,用@Body时也只能接收ResponseBody类型。要用其他类型实体需要引入Retrofit适配库
支持以下6种实体
Gson: com.squareup.retrofit2:converter-gson
Jackson: com.squareup.retrofit2:converter-jackson
Moshi: com.squareup.retrofit2:converter-moshi
Protobuf: com.squareup.retrofit2:converter-protobuf
Wire: com.squareup.retrofit2:converter-wire
Simple XML: com.squareup.retrofit2:converter-simplexml
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars
自定义CONVERTER,实现Converter.Factory,照以下方式添加使用
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();