首页 > 其他 > 详细

Retrofit学习笔记01

时间:2016-02-29 14:09:49      阅读:238      评论:0      收藏:0      [点我收藏+]

retrofit把你的HTTP API改造成java接口。

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

Retrofit类实现了GithubService接口。

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

这样就实现并创建了一个GithubService实例。

这个实例每次调用create方法都会创建一个同步或异步的远程网络服务。

Call<List<Repo>> repos = service.listRepos("octocat");

使用注解来描述这个HTTP请求:

支持URL参数与数组参数。

支持request body添加Object参数(比如JSON,protocol buffers)

支持Multipart requeset body与文件上传。

注意:这一部分还在2.0 AIPs 后不断拓展。

声明

接口方法的注释与参数表明了该请求应如何处理。

请求方式

每一个请求都必须有描述请求方式及请求地址的HTTP注释。

@GET("users/list")

你也可以在URL中添加参数。

@GET("users/list?sort=desc")

 

URL处理

请求可以通过在url中使用置换块实现动态更新参数。置换块是使用被{}包裹的含有字母、数字的字符串。相应的参数必须通过@Path注释 参数名与之前的字符串相同。

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);

 

数组参数也可以被这样添加。

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

 

复杂的数组参数可以通过Map组合实现。

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

 

REQUEST BODY

一个object对象可以通过 @Body 注释 来被指定为 request body。

@POST("users/new")
Call<User> createUser(@Body User user);

 

这个object将会被Retrofit实例指定的的转换器所转换。如果Retrofit实例没有添加转换器,就只能使用 RequestBody。

 

FORM ENCODED AND MULTIPART

方法也可声明发送 form-encoded 和 multipart data。

当在方法中出现@FormUrlEncoded时会发送form-encoded data。每一个键值对通过 @Field 注释来提供name与object的值。

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

 

Multipart 部分使用Retrofit的一个转换器或者通过实现RequestBody去实现他们自己的序列化。

 

HEADER MANIPULATION

你可以通过使用@Headers注释设置统一的headers

@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

注意headers都不会进行覆盖。相同名字的headers都会包含在请求中。

 

一个请求的Header 可以通过使用@Header注释来实现动态更新。必须为@Header注释提供对应的参数。如果参数值为null,这个header将会被忽略。反之,将会使用参数的toString方法的输出作为参数的值。

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

午休吃饭去

原文地址点这里

Retrofit学习笔记01

原文:http://www.cnblogs.com/eliyet/p/5227004.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!