Retrofit基本使用

Retrofit是由著名的 Square 公司开源的一个基于OkHttp实现网络请求的框架,以其简易的接口配置、强大的扩展支持、优雅的代码结构受到大家的追捧。

与OkHttp的关系

Retrofit2.0中网络请求部分有OkHttp实现,其框架层主要实现了接口层的封装,对RESTful风格拥有完美的支持。


Retrofit基本使用_第1张图片
架构图.png

其中Retrofit层实现RESTful接口的封装,OkHttp全权负责与服务器的交互。Retrofit与OkHttp完全耦合。

使用

首先引入Retrofit包和OkHttp包

implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.8.0'

按照Retrofit官网的例子,定义访问Github的接口

public interface GitHubService {
  @GET("users/{user}/repos")
  Call> listRepos(@Path("user") String user);
}

Retrofit对域名及参数进行了封装,相当于访问

https://api.github.com/users/{user}/repos

listRepos方法中可以传入相应的用户名
接下来,构造 Retrofit

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

调用listRepos方法

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

执行网络请求

// 同步调用
List data = repos.execute(); 

// 异步调用
repos.enqueue(new Callback>() {
    @Override
    public void onResponse(Call> call, Response> response) {
      List data = response.body();
    }

    @Override
    public void onFailure(Call> call, Throwable t) {
      t.printStackTrace();
    }
});

RESTful接口封装

Retrofit对RESTful风格接口具有完美的封装,在Retrofit中,各种网络请求方式及参数都使用了注解,大大简化的调用难度。
网络请求方式主要有以下几种:

  • @GET
  • @POST
  • @PUT
  • @DELETE
  • @PATCH
  • @HEAD

GET请求

@GET("users/{user}/repos")
Call> listRepos(
    @Path("user") String user
    @Query("password") String password
);

其中@Path可以灵活传入path路径参数,@Query传入需要传入的请求参数值,当请求参数较多或有些参数不用传时,可以使用@QueryMap灵活实现。

POST请求

@FormUrlEncoded
@POST("/")
Call example(
   @Field("name") String name,
   @Field("occupation") String occupation
);

POST请求中当需要使用表单形式传参时,可使用@FormUrlEncoded进行标记。传入的参数使用@Field进行标记,当传入参数较多或有些参数不用传时,可以使用@FieldMap灵活实现。

PUT请求

@FormUrlEncoded
@PUT("sys/user/resetPassword")
Call resetPassword(
    @Field("telephone") String telephone,
    @Field("password") String pwd
);

当需要修改服务器上的某些信息时,我们可以使用PUT请求,其使用方式类似于POST请求。

你可能感兴趣的:(Retrofit基本使用)