美文网首页
retrofit 随便翻译的。。。

retrofit 随便翻译的。。。

作者: 吐痰高手 | 来源:发表于2017-11-08 22:44 被阅读13次

Introduction

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对象,产生的每个Call对象都可以向远程服务器发送一个同步的或者异步的Http请求

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

使用注释来描述HTTP请求:

  • 支持替换URL参数和查询参数
  • 请求体直接转换为对象
  • Multipart request body and 文件上传

API 的声明

对一个接口方法添加注释,它的参数表示了这个请求是怎么处理的

请求方法

每个方法必须有一个HTTP注释,诸葛注释提供了具体的请求方式和相关的URL.
默认提供了五中内置的注释:++GET++, ++POST++, ++PUT++, ++DELETE++, and ++HEAD++.资源的相关URL要在注释中指定

@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);

请求体

一个使用@Body注释修饰的对象可以表示为一个HTTP的请求体

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

使用Retrofit的实例,转化器(converter)会把HTTP请求体转化成这个对象,如果没有转化器(converter)则只有RequestBody可以使用

form encoded 和 multipart

方法可以被声明来发送form encoded 和 multipart数据

当使用@FormUrlEncoded注释标记方法的时候将会发送Form-encoded数据.
@Field包含了键的名字,修饰的对象则是对应的值,每个@Field都是一个键值对:

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

相关文章

网友评论

      本文标题:retrofit 随便翻译的。。。

      本文链接:https://www.haomeiwen.com/subject/ppsumxtx.html