android http重复请求,使用 BaseOkHttpV3 阻止重复请求

需求

遇到了个非常奇葩的问题才导致这个功能诞生的。一个项目里需要轮询一个接口,接口会给出消息,根据消息判断请求另一个接口后增加本地数据,结果服务端一次性给过来多条相同的消息导致本地异步执行了多次的更新数据接口导致本地数据重复。

另外日常开发组也经常遇到例如用户手抖导致多次请求的情况,那么实际上此问题是可以在框架层直接拦截处理的。

解决方案

每次请求的 URL 地址和参数都一致的情况,开启拦截选项后,同一请求地址同一请求参数的请求,在一个请求未结束前,将不允许再次请求逻辑。

BaseOkHttpV3下一版增加禁止重复请求功能,从原理上你再也不用担心用户手抖多按几次按钮的问题了。

在新版本 BaseOkHttpV3 中,需要先开启禁止重复请求的开关:

BaseOkHttp.disallowSameRequest = true;

原理

在 BaseOkHttp.java 中增加了一个存储队列:

static List requestInfoList;

每次发出一个新的请求后,会添加至此队列:

addRequestInfo(new RequestInfo(url, parameter));

而再次请求时,则会进行判断,若队列中存在此请求则会拦截:

if (disallowSameRequest && equalsRequestInfo(requestInfo)) {

//发生重复请求

return;

}

而当请求完成,请求失败,超时等,则会从队列清除。

若有特殊情况额外需要多次快速建立请求的场景,可以按需求关闭此选项或在参数中添加时间戳以避免被当做重复请求。

使用

若正在使用 BaseOkHttpV3 框架,可更新至 3.1.9.5 测试版本:

//BaseOkHttp V3 网络请求库

implementation 'com.kongzue.baseokhttp_v3:baseokhttp_v3:3.1.9.5'

//BaseJson 解析库

implementation 'com.kongzue.basejson:basejson:1.0.5'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值