zoukankan      html  css  js  c++  java
  • Android Xutils框架HttpUtil Get请求缓存问题

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

      话说今天有个“收藏产品”的请求接口,是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,有兴趣的同学可以翻阅,爱钻研的同学可以下载源码学习。

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

  • 相关阅读:
    二叉树
    oracle 查看某session的历史执行sql情况
    mongodb备份与恢复
    MongoDB数据库基本用法
    常见Oracle HINT的用法
    提高Oracle的WHERE语句性能一些原则
    javascript的类、委托、事件
    Swift数据类型简介(二)
    arcgis api 3.x for js 入门开发系列十七在线天地图、百度地图、高德地图(附源码下载)
    arcgis api 4.x for js之图层管理篇
  • 原文地址:https://www.cnblogs.com/hehe520/p/6329977.html
Copyright © 2011-2022 走看看