话说,今天和服务器开发人员小小的逗逼了一下,为啥呢?

话说今天有个“收藏产品”的请求接口,是get request的哦,我客户端写好接口后,点击“收藏按钮”,返回“收藏成功”,我又点了一下,尼玛居然还是“收藏成功”,我再点一下,这下对了,返回给我“取消收藏成功”,好吧,我又点了一下,彻底郁闷了,居然又是“取消收藏成功”,这不是逗我的么?

于是我让服务器人员检查他的接口,是不是有啥幺蛾子,这么诡异。结果他检查了半天,反馈我没问题,并让我去他机器上看下,他用的是postman发送请求接口进行测试的。

我一看,哈,居然真没问题,难道是我错了?

我回头又检查了一遍,没错啊,我写的代码怎么会错呢?(程序员就是要这么自信)

于是撕逼之战开始了,我让他检查他服务器的错,他让我检查客户端的错。。。。到底是谁的错呢?

折腾了半天之后,我发现了错误之处。

——是Xutils框架HttpUtil Get请求缓存问题。

  Xutils框架Http模块添加GET请求文本内容时实现LRU缓存的工作,可设置缓存默认过期时间和针对当前请求的过期时间。

听起来神奇吧,Xutils框架的get请求居然实现了LRu缓存了,也就是说,在我不停点击“收藏按钮”的时候,发送的请求直接返回了上一次请求的数据,而不是进行了新的请求。

哎,我居然不知道这个功能,居然犯了这么逗逼的错误。

好吧,重新改写了请求工具类,完善的工具类给大家:

/**
* 发送http请求,自动实现异步处理
*
* @param url 请求的地址
* @param params 请求的参数
* @param iOAuthCallBack 数据回调接口
*/
public static void sendRequest(final Context context,
final HttpMethod method, String url, RequestParams params,
final IOAuthCallBack iOAuthCallBack) {
LogUtils.d("requestUrl : " + getAbsoluteUrl(url)); HttpUtils http = new HttpUtils(); http.configCurrentHttpCacheExpiry(1000 * 5);
// 设置超时时间
http.configTimeout(5 * 1000);
http.configSoTimeout(5 * 1000); if(method==HttpMethod.GET){ http.configCurrentHttpCacheExpiry(5000); // 设置缓存5秒,5秒内直接返回上次成功请求的结果。
} http.send(method, getAbsoluteUrl(url), params,
new RequestCallBack<String>() { @Override
public void onStart() {
LogUtils.d(method.name() + " request is onStart.......");
} @Override
public void onSuccess(ResponseInfo<String> responseInfo) {
LogUtils.d("statusCode:" + responseInfo.statusCode + " ----->" + responseInfo.result);
iOAuthCallBack.getIOAuthCallBack(responseInfo.result);// 利用接口回调数据传输
} @Override
public void onFailure(HttpException error, String msg) {
LogUtils.d("statusCode:" + error.getExceptionCode() + " -----> " + msg);
iOAuthCallBack.getIOAuthCallBack("FF");// 利用接口回调数据传输
}
});
}

后记:

Xutils框架是一款功能强大的第三方工具类的框架,它有四个模块,ViewUtil,Dbtuls,BitmapUtil,HtpUtil;每一个工具类可以完成相应的一个模块的功能。之前我就转载了四篇博文介绍Xutils,有兴趣的同学可以翻阅,爱钻研的同学可以下载源码学习。

我用了这款框架做了半年的应用,这四个模块都用过,总体感觉就一个字——方便、爽!

最新文章

  1. Java学习之注解Annotation实现原理
  2. java重置定时器频率
  3. Python之路-python(set集合、文本操作、字符编码 )
  4. [转]后台页面访问权限:页面基类&amp;内置票据认证 使用方法
  5. vim标准操作
  6. iOS上百度输入法引起的问题
  7. hibernate01ORM的引入
  8. python之列表生成式
  9. linux安装文件命令
  10. python_递归_斐波那契
  11. linux配置上网
  12. 归并排序-JAVA实现
  13. 【Vue.js】加载更多—vue-infinite-scroll
  14. SSH之Hibernate总结篇
  15. Linux系统安全学习笔记(1)-- 文件系统类型
  16. Confluence 6 配置草稿保存的时间
  17. Docker 入门 第四部分: Swarms
  18. 简单的SSM框架搭建教程
  19. mongodb和spring的整合
  20. Nodejs学习事件模块

热门文章

  1. ssh连接超时中断问题解决方案
  2. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
  3. JSP-request(httpServletRequest)
  4. mysql连接出现Unknown system variable &#39;tx_isolation&#39;异常
  5. 洛谷P1970 [NOIP2013提高组Day2T2] 花匠
  6. XtraBackup构建MySQL主从环境的方法
  7. WCF 无管理员权限下启用服务
  8. cf round 482E Kuro and Topological Parity
  9. laravel-- 在laravel操作redis数据库的数据类型(string、哈希、无序集合、list链表、有序集合)
  10. SVN 打包时,出现File not found: transaction &#39;148-48&#39;, path &#39;&#39;https://xxxxxx/svn/xxxxx/tag/2017-9-30&#39;