Retrofit使用详解

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 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 userCall = githubService.getUser("patrick-iv");
                try {
                    Response 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 getUser(@Path("user") String userName);
 // 添加参数user
 @GET("/users")
 Call getUser(@Query("user") String userName);
 // 多个参数时可以用Map
 @GET("group/{id}/users")
Call> groupList(@Path("id") int groupId, @QueryMap Map 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> widgetList();
// 用参数设置请求头,value为空时该请求头会被删除,value会自动被调用toString
@GET("user")
Call 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();

你可能感兴趣的:(Android)