您的位置:

Android Retrofit2详解

一、什么是Retrofit2?

1、Retrofit2是一个RESTful网络请求工具库,是Square公司基于OkHttp网络库封装而成的,它可以直接将HTTP API转换为Java语言的接口。

2、Retrofit2的目标是使HTTP访问更简单、更快捷、更有趣,它在很大程度上简化了与HTTP客户端的交互过程。使用Retrofit2,可以使网络请求代码变得更加清晰、简洁。

3、Retrofit2具有类型安全、可解析、高效、易用、可扩展等优点。

二、如何使用Retrofit2?

1、依赖库:在build.gradle文件中添加以下内容:

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

2、定义接口:定义一个Java接口,使用Retrofit2的注解将HTTP API转换为Java接口。

public interface ApiService {
    @GET("api/data/{type}/{count}/{page}")
    Call getGankData(@Path("type") String type, @Path("count") int count, @Path("page") int page);
}

  

3、创建Retrofit实例:使用Retrofit2的Builder设计模式创建Retrofit实例,在构造中指定基础URL和一个转换器Factory,可以使用多个转换器,如转换为Gson数据类型等。

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(baseUrl)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

4、使用配置好的Retrofit实例创建APIService实例:

ApiService apiService = retrofit.create(ApiService.class);

5、 创建Call对象并发送网络请求:

Call call = apiService.getGankData(type, count, page);
call.enqueue(new Callback
   () {
    @Override
    public void onResponse(Call
     call, Response
      response) {
        //处理响应结果
    }

    @Override
    public void onFailure(Call
       call, Throwable t) {
        //处理请求失败
    }
});

      
     
    
   
  

三、Retrofit2的注解

1、@GET:用于发送HTTP GET请求。

//url为http://www.example.com/api/data/Android/10/1
@GET("api/data/{type}/{count}/{page}")
Call getGankData(@Path("type") String type, @Path("count") int count, @Path("page") int page);
  

2、@POST:用于发送HTTP POST请求。

@POST("api/user/login")
Call login(@Body User user);
  

3、@PUT:用于发送HTTP PUT请求。

@PUT("api/user/{id}")
Call updateUser(@Path("id") int id, @Body User user);
  

4、@DELETE:用于发送HTTP DELETE请求。

@DELETE("api/user/{id}")
Call deleteUser(@Path("id") int id);
  

5、@Query:用于向URL中添加查询参数。

@GET("api/user/list")
Call
   > getUserList(@Query("gender") String gender);
   
  

6、@Path:用于替换URL中的一部分,如上面的@Path(“type”)。

7、@Body:用于发送一个实体的请求体,比如可以发送一个用户注册信息。

8、@Header:用于向请求头中添加一个参数,如下面的@Header(“Authorization”)。

@GET("api/user")
Call getUserInfo(@Header("Authorization") String token);
  

四、Retrofit2的其他用法

1、使用RxJava2构建响应式API,可以将Call对象转换为Observable对象。

2、使用Interceptor可以添加请求拦截器和响应拦截器,可以实现请求重试、请求头添加、缓存等功能。

3、使用Converter将响应数据转换为指定的格式,如Gson、Jackson、Xml等。

4、支持多种HTTP客户端配置,如OkHttp、Java的HttpURLConnection、Android内置HttpClient等。

5、支持异步和同步请求。

五、Retrofit2个人体会

1、Retrofit2很好地实现了将HTTP API转换为JAVA接口的功能,使得网络请求更加简单直观。

2、Retrofit2支持各种HTTP客户端和转换器,可以实现自定义的网络请求和数据解析。

3、Retrofit2的注解灵活易用,可以支持各种类型的请求方法和参数传递方式。

4、Retrofit2的设计思想使得网络请求可以更加简洁优雅,减少了网络请求的代码量。