Retorfit 基本用法

2020-04-26  本文已影响0人  anonymous_6bb6

介绍

Retorfit 是一个 RESTFul 的 HTTP 网络请求框架的封装,底层连接网络的工作是由 OkHttp 来完成的。Retrofit 提供的是将网络请求接口化

使用

  1. 添加 Retorfit 库的依赖 官网
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
  1. 创建描述网络请求的接口
public interface GetService {
    @GET("users/{user}/repos")
    Call<String> getRepos(@Path("user") String user);
}
  1. 创建Retrofit 实例
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("xxxx.xxxx")
                .build();
  1. 创建网络接口实例
    GetService getAnswer = retrofit.create(GetService.class);
  2. 发送网络请求
Call call = getAnswer.getRepos("daniel");

同步

Call call = getAnswer.getRepos("daniel");
        try {
            call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }

异步

call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
            }
            @Override
            public void onFailure(Call call, Throwable t) {
            }
        });

API 讲解

接口注解
接口方法的注解和接口参数上的注解是用来指示如何来建立请求。Retrofit 库规定,每一个接口方法都要用注解来提供请求方式以及请求的相对路径。

1 网络请求方法

请求方法除了上述的@GET之外,还有@HTTP @POST @PUT @PATCH @DELETE @OPTIONS @ HEAD,而相对URL可以注解中指定出来@GET("users/list"),还可以在URL中指定查询参数@GET("users/list?sort=desc")
请求URL也是可以通过参数动态更新的,被替换的字符串需要用{}括起来,同时在参数中要用@Path(“”)来标记需要进行替换的参数

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

对于较为复杂的query参数,可以使用@QueryMap

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

接口方法同样可以用注解的方式声明请求体类型,用到的注解有
@FormUrlEncoded

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

其中参数用@Field("表单Key"), 后面的参数来表示Value

@Mutipart

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

参数需要用@Part来标记

3 网络请求参数

@Headers @Header(用于参数中) 用来添加请求头
@Field @ FieldMap用于添加表单数据到请求体中
@Part @PartMap 用于添加有文件上传的表单到请求体中
@Query @QueryMap生成URL上的表单数据

上一篇下一篇

猜你喜欢

热点阅读