首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Retrofit在安卓项目中的封装与应用

官网地址: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);

}

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180423G0DHFA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券