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,有兴趣的同学可以翻阅,爱钻研的同学可以下载源码学习。

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

时间: 2024-11-16 11:32:18

Android Xutils框架HttpUtil Get请求缓存问题的相关文章

Android Xutils框架使用问题及解决办法

    刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个小问题整理一下. 一. HttpUtil Get请求缓存问题       关于Xtuls框架的Http模块的get请求方法,会有缓存问题--即进行get请求时,在缓存规定的时间内,如果发送同样的请求url,则不会再次请服务器发送请求,而是直接返回上次请求的结果. 之前写了一篇博客已经介绍的很

Android Xutils 框架

android 目录(?)[+] xUtils简介 xUtils 包含了很多实用的android工具. xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2 (api level 8) 目前xUtils主要有四大模块: DbUtils模块: android中的orm框架,一行代码就可以进行增删改查: 支持事务,默认关闭

Android XUtils3框架的基本使用方法(二)_Android

上一篇Android中XUtils3框架使用方法详解(一)文章,主要介绍了XUtil3的注解模块,网络模块,图片加载模块,今天给大家带来数据库模块的讲解,现在主流的ORM框架很多,比如OrmLite,GreenDao,Active Android,Realm等等,这些框架每个都有自己的优点和缺点,大家完全可以根据自己项目的实际需求进行选择,下面开始进入今天的数据库模块的介绍. 今天主要给大家带来以下几个模块: 如何创建删除一张表 如何对表进行增删查改操作 如何创建数据库和删除数据库 如何建立一表

接口-Android第三方框架xUtils的post请求案例

问题描述 Android第三方框架xUtils的post请求案例 比如关注功能,点击的时候调接口POST请求,将参数传过去,id.code.我要将code值改变成1来表示已关注.这个操作代码怎么做啊? 解决方案 /** * 获取json数据 * * @return * */ @SuppressWarnings("unused") public void getJson(Context cxt, String url) { HttpUtils http = new HttpUtils()

Android中的xutils框架在访问服务器时如何携带json数据

问题描述 Android中的xutils框架在访问服务器时如何携带json数据 xutils框架的httputils在访问服务器时如何像HttpURLConnection一样携带json数据 HttpURLConnection携带数据的案例,使用put请求: URL url; HttpURLConnection connection = null; int flag = 0; try { String userIpAddress = "http://" + "124.207.

Android开发使用AndBase框架完成Http请求

AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼主对比了两个框架中的源码...Volley更多的地方是使用抽象方法封装在接口内,然后对外暴露接口,其他类在实现接口的同时需要实现内部的抽象方法...而AndBase则是使用继承的方式..继承父类..实现类通过重写的方式对封装的方法重写从而进行下一步的操作... 相比二者网络请求的源码,Volley源码的书写还是

Android AndBase框架使用封装好的函数完成Http请求(三)_Android

本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习. 学习内容: 1.使用AndBase框架实现无参Http Get请求... 2.使用AndBase框架实现有参Http Post请求... 3.使用AndBase框架实现有参Http Get请求...    AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架

android 线程池配合网络请求框架

问题描述 android 线程池配合网络请求框架 android一些比较常用的网络请求框架如Xutils,volley,内部有线程池吗?如果没有,如何配合自己编写的线程池进行网络请求? 解决方案 Volley是有的,参考:http://www.zhihu.com/question/24695486

怎样请求参数-Android xutils put请求服务器

问题描述 Android xutils put请求服务器 Android xutils put请求服务器时,怎样传递参数 解决方案 传参尽量用post,传参尽量用post 解决方案二: 去参考master下提供的sample 解决方案三: 去参考下官方提供的例子