官网地址:http://square.github.io/retrofit/
1. Retrofit担任什么角色
Retrofit是一个 RESTful的HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,Retrofit负责网络请求接口的封装。
App应用程序通过 Retrofit 请求网络,实际上是使用Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。
在服务端返回数据之后,OkHttp 将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。
2. 使用介绍
使用 Retrofit 的步骤共有7个:
步骤1:添加Retrofit库的依赖
步骤2:创建Retrofit实例
步骤3:创建用于描述网络请求的接口
步骤4:创建网络请求接口实例并配置网络请求参数
步骤5:发送网络请求(异步 / 同步)
步骤6:根据服务器接口返回数据的格式自定义CallBack
***************************************************************************
步骤1:添加Retrofit库的依赖
1. 在 Gradle加入Retrofit库的依赖
build.gradle
2. 添加 网络权限
AndroidManifest.xml
步骤2:创建Retrofit实例
//定制OkHttp
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(//设置超时时间)
.addInterceptor(newInterceptor() { //请求拦截器,修改请求header
@Override
public okhttp3.Response intercept(Chainchain) throws IOException{
Requestrequest = chain.request().newBuilder()
.addHeader(//设置请求头)
.build();
return chain.proceed(request);
}
});
builder.sslSocketFactory(//添加https证书验证);
OkHttpClient client = builder.build();
//创建retrofit实例
Retrofit retrofit = new Retrofit.Builder().baseUrl(//设置BaseUrl)
//设置数据解析器
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
注:关于数据解析器(Converter)
·Retrofit支持多种数据解析方式
·使用时需要在Gradle添加依赖
步骤3:创建用于描述网络请求的接口
Retrofit将Http请求抽象成 Java接口:采用注解描述网络请求参数和配置网络请求参数
用动态代理动态将该接口的注解“翻译”成一个 Http 请求,最后再执行Http 请求
注:接口中的每个方法的参数都需要使用注解标注,否则会报错
public interface IRequest {
@GET("/info")
Call>getInfo(@Query("type") String type);
}
// @GET注解的作用:采用Get方法发送网络请求
//getInfo(String type):接收网络请求数据的方法
//@Query用于 @GET 方法的查询参数(Query = Url 中 ‘?’ 后面的 key-value)
// 其中返回类型为Call,*是接收数据的类(即上面定义的BaseModel类)
// 如果想直接获得Responsebody中的内容,可以定义网络请求返回值为Call
步骤4:创建网络请求接口实例
// 创建网络请求接口的实例
IRequestIRequest
// 对发送请求进行封装
BaseModelgetInfo//对应参数
步骤5:发送网络请求(异步)
//发送网络请求(异步)
newBaseModel
//请求成功时回调
@Override
publicvoidonResponse(Call> call,
Response> response)
//请求成功结果处理
//请求失败时候的回调
@Override
publicvoidonFailure(Call> call, Throwable throwable)
"连接失败"
步骤6:根据服务器接口返回数据的格式自定义CallBack
服务器返回的结果是有标准格式的,我们对CallBack进行二次封装可以使代码更加优雅
服务器返回数据的外层格式:
1.定义一个BaseModel,利用泛型去适合服务器返回的所有的bean
public class BaseModel{
private String resultMsg;
private String resultCode;
private T resultData;
}
2.对服务器统一的code进行处理,自定义CallBack
public abstract classCbwCallback implements Callback {
@Override
public void onResponse(Call call,Response response) {
AlertUtil.dismissDialog();
if (response.raw().code() == 200) {
String resultCode =response.body().getResultCode();
if (!TextUtils.isEmpty(resultCode)){
if(resultCode.equals(RESULT_OK)) {
onSuccess(response);
} else if(resultCode.equals(RESULT_AUTH_FAILED)) {
//统一的错误,比如token失效
}
} else {
onFailure(call, newException());
}
} else {
onFailure(call, new Exception());
}
}
@Override
public void onFailure(Call call,Throwable t) {
AlertUtil.dismissDialog();
onFail(mContext.getString(R.string.request_error));
}
public abstract void onSuccess(Responseresponse);
public abstract void onFail(Stringmessage);
}
领取专属 10元无门槛券
私享最新 技术干货