Retrofit初体验

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值