什么是Retrofit
Retrofit是一个基于OkHttp的RESTful HTTP网络请求库,是目前比较流行的HttpClient库之一。它使得开发者可以更方便地与Web服务交互,通过简洁的API接口,实现了将REST API请求转化为Java接口调用的方式。
Retrofit的主要特点如下:
- 简单易用:Retrofit使用简洁的注解方式定义REST API的接口,支持多种HTTP请求方法(如GET、POST、PUT、DELETE等),并自动将响应结果转换为Java对象。
- 支持异步请求:Retrofit支持异步网络请求,可以使用RxJava、Kotlin协程等方式实现异步请求,避免在主线程中执行耗时操作。
- 支持自定义拦截器和转换器:Retrofit可以通过自定义拦截器和转换器实现各种功能,如添加请求头、日志记录、错误处理、JSON解析等。
- 支持文件上传和下载:Retrofit支持文件上传和下载,可以将文件作为请求体或响应体发送或接收。
- 支持URL替换和查询参数:Retrofit支持URL替换和查询参数,可以在URL中动态替换参数,或在查询参数中传递参数。
- 兼容多种序列化库:Retrofit支持多种序列化库,如Gson、Jackson等,可以自动将响应结果转换为Java对象。
Retrofit的使用方式
1、定义一个接口(封装URL地址和数据请求)
2、实例化Retrofit
3、通过Retrofit实例创建接口服务对象
4、接口服务对象调用接口中方法,获得Call对象
5、Call对象执行请求(异步、同步请求)
入门案例
通过GET请求访问https://www.wanandroid.com/banner/json
public interface ApiService {
/**
* get无参请求
* https://www.wanandroid.com/banner/json
*/
@GET("banner/json")
Call<ResponseBody> getBanner();
}
创建Retrofit实例时需要通过Retrofit.Builder,并调用baseUrl方法设置URL
public class MainActivity {
public static final String BASE_URL = "https://www.wanandroid.com/";
@Override
protected void onCreate(Bundle savedInstanceState) {
//2.实例化Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.build();
//3.通过Retrofit实例创建接口服务对象
ApiService apiService = retrofit.create(ApiService.class);
//4.接口服务对象调用接口中方法,获得Call对象
Call<ResponseBody> call = apiService.getBanner();
//5.Call对象执行请求(异步、同步请求)
//同步请求:不常用,一般使用异步请求
//Response<ResponseBody> execute = call.execute();
//异步请求
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//onResponse方法是运行在主线程也就是UI线程的,所以我们可以在这里直接更新ui
if (response.isSuccessful()) {
try {
String result = response.body().string();
log.info("onResponse: {}", result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
//onFailure方法是运行在主线程也就是UI线程的,所以我们可以在这里直接更新ui
Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
//call.cancel(); //取消
}