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

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

相关文章
|
3月前
|
缓存 安全 Android开发
Android经典实战之用Kotlin泛型实现键值对缓存
本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
41 2
|
25天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
48 15
Android 系统缓存扫描与清理方法分析
|
3月前
|
存储 安全 Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
【8月更文挑战第13天】随着Android系统的更新,权限管理变得至关重要。尤其从Android 6.0起,引入了动态权限请求,增强了用户隐私保护并要求开发者实现更精细的权限控制。本文采用问答形式,深入探讨动态权限请求机制与最佳实践,并提供示例代码。首先解释了动态权限的概念及其重要性;接着详述实现步骤:定义、检查、请求权限及处理结果;最后总结了六大最佳实践,包括适时请求、解释原因、提供替代方案、妥善处理拒绝情况、适应权限变更及兼容旧版系统,帮助开发者打造安全易用的应用。
73 0
|
2月前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
194 24
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
1月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
37 4
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
156 14
|
2月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
70 8
|
2月前
|
存储 API Android开发
"解锁Android权限迷宫:一场惊心动魄的动态权限请求之旅,让你的应用从平凡跃升至用户心尖的宠儿!"
随着Android系统的更新,权限管理成为应用开发的关键。尤其在Android 6.0(API 级别 23)后,动态权限请求机制的引入提升了用户隐私保护,要求开发者进行更精细的权限管理。
66 2
|
3月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
996 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
3月前
|
缓存 分布式计算 Java
详细解读MapReduce框架中的分布式缓存
【8月更文挑战第31天】
40 0

热门文章

最新文章

下一篇
无影云桌面