一、什么是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}") CallgetGankData(@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对象并发送网络请求:
Callcall = 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}") CallgetGankData(@Path("type") String type, @Path("count") int count, @Path("page") int page);
2、@POST:用于发送HTTP POST请求。
@POST("api/user/login") Calllogin(@Body User user);
3、@PUT:用于发送HTTP PUT请求。
@PUT("api/user/{id}") CallupdateUser(@Path("id") int id, @Body User user);
4、@DELETE:用于发送HTTP DELETE请求。
@DELETE("api/user/{id}") CalldeleteUser(@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") CallgetUserInfo(@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的设计思想使得网络请求可以更加简洁优雅,减少了网络请求的代码量。