Retrofit初体验

来源:互联网 发布:网络电视怎么看翡翠台 编辑:程序博客网 时间:2024/05/21 14:52

Retrofit初体验

在代码家的gankio上经常出现关于使用Retrofit的例子,google了一下。Retrofit是一个类型安全的http客户端。听网上说Retrofit和Rx系列更配哦。

首先在AndroidStudio中引入Retrofit的jar包。通过compile'com.squareup.retrofit2:retrofit:2.1.0'来进行引入。

Retrofit把我们的http api请求封装成接口的方法

    public interface GetRandomDatas {    @GET("random/data/{category}/{sum}")    Call<RandomAndCategoryDatas> listRope(@Path("category") String category, @Path("sum") int sum);}

Retrofit提供了GET、POST、PUT、DELETE、和HEAD 5中注解。分别对应各自的http请求。在使用这些注解时需要输入的是请求的相对路径。

在使用GET注解时可用使用{}和@Path注解对GET中的内容进行替换例如上面的例子random/data/{category}/{sum}和方法中的@Path("category") String category, @Path("sum") int sum 使用方法中传入的category和sum去替换路径中的category和sum。在GET注解中可用使用@query作为路径?sort=xx替代方法。使用Query()注解后,在GET()注解中就不用填写查询参数了。对于多查询的情况可用使用QueryMap()注解进行封装。

在使用POST()注解时,通过使用@Body()注解来指定request的body中的内容。

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

通过使用@FormUrlEncoded注解来对发送的内容进行编码。每一个键值对都使用@Field()注解来表示对应关系。

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

对于多部分的请求而言在方法上使用@Multipart()注解来进行说明。每一个部分都使用@Part()注解来说明。

@Multipart@PUT("user/photo")Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description)

对于请求头信息有两种使用方式:

  1. 在方法上标注使用的消息头信息@Headers
  2. 在方法的参数中标注是消息头信息@Header

使用@Headers注解表示使用的静态的头信息,而使用@Header注解可用动态的改变头信息。具体的使用方法如下:

@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);
@GET("user")Call<User> getUser(@Header("Authorization") String authorization)

使用的方式也非常简单:

Retrofit retrofit=new Retrofit.Build()    .baseUrl("")    .addConverterFactory(GsonConverterFactory.create())    .build()

addConverterFactory(GsonConverterFactory.create())该方法是添加一个Gson的转换器。然后就可用通过retrofit.create()方法得到自己所定义的接口的实力,通过调用自己在接口中定义的Call<T t>方法得到Call的实例,call有两个方法进行http请求分别是execute()enqueue()方法,前者是进行同步请求后者是使用异步请求,在android中推荐使用后面一种方式进行http请求。

0 0
原创粉丝点击