Retrofit 2.0 的使用

Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装(基于OkHttp)。java

Retrofit 使用介绍

使用 Retrofit 能够分为7个步骤:git

    1. 添加 Retrofit 库的依赖
    1. 建立接收服务器返回数据的类
    1. 建立用于描述网络请求的接口
    1. 建立 Retrofit 实例
    1. 建立网络请求接口实例
    1. 发送网络请求(同步/异步)
    1. 处理返回的数据

添加 Retrofit 库依赖github

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
复制代码

经常使用参数注解

  • @GET、@POST、@PUT、@DELETE、@HEAD:肯定请求方式json

  • @Path:请求URL的字符替代bash

  • @Query:要传递的参数服务器

  • @QueryMap:包含多个@Query注解参数网络

  • @Body:添加实体类对象app

  • @FormUrlEncoded:URL编码框架

GET 请求异步

@GET("users/list")

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

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

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

如何使用 @POST 请求,还能够和 @FormUrlEncoded 注解一块儿使用,表示将发送表单编码数据。每一个键值对都使用包含名称的 @Field 和提供值的对象进行注释。

示例以下:

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

@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);
复制代码

您能够使用@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);
复制代码

请注意,标头不会相互覆盖。全部具备相同名称的标头都将包含在请求中。

能够使用 @Header 注释动态更新请求标头。必须为 @Header 提供相应的参数。若是该值为null,则将省略标头。不然,将在值上调用toString,并使用结果。

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization) @GET("user") Call<User> getUser(@HeaderMap Map<String, String> headers) 复制代码

Retrofit 2.0 来设置拦截器,只能经过OkHttp来实现,无论是在1.x仍是2.0,这种方式都是比较推荐的。

OkHttpClient.Builder okBuilder = new OkHttpClient().newBuilder();
okBuilder.addNetworkInterceptor(new Interceptor() {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        Request.Builder requestBuilder = original.newBuilder().addHeader("Accept", "application/json");
        Request request = requestBuilder.build();
        return chain.proceed(request);
        }
    });
okHttpClient = okBuilder.build();
复制代码

发送请求

  • 同步:调用 Call 对象的 execute(),返回结果的响应体

  • 异步:调用 Call 对象的 enqueue(),参数是一个回调

总结

    1. Retrofit 是基于 OkHttp 网络库的高级封装。
    1. 采用注解、网络请求参数配置更灵活、扩展性更好。
    1. 采用 RESTful 风格的 API 。

注意:

baseUrl 中的url地址要以 / 结尾。






About Me

相关文章
相关标签/搜索