okhttp或者retrofit实现网络缓存504错误原因

  • 这两天在做网络请求的缓存,我用的是retrofit2.1.0
  • retrofit 实现缓存,其实质是okhttp实现网络缓存。
  • 但是在这个工程中,遇到了一个问题 返回错误码 504,缓存数据没有读出来。

先说重点:

原因其实原因很简单:我的url中有个公共参数,
我的url是这样的

https://tc****.h****.cn/get_carousel_list?versionName=1.6.3&clientType=Nexus6_android_& net=wifi&user_id=8d16a137d5cc, tag=null

发现了吗?我的公共参数中有net这个值,
当我联网缓存的时候是net的值是wifi3GLTE
当我断网的时候net的值是disconnection
这就是我缓存失败的原因。
因为我们所有的数据是对url进行了MD5后,作为文件名,
包数据写对应的文件中。当我们网络状态改变的时候,
我们得到的MD5的值更本不是同一个,
所以,我们更本无法拿到我们正确的缓存文件。

结论
504 错误归根究竟是缓存没有找到。没找到的原因是缓存对应的url改变了,错使MD5后文件名改变,因此没有找到url对应的缓存。

解决办法
方法1、和服务端协商,将url中的公共参数,例如net的状态放在header中。
方法2、去掉net这个参数,是url保持固定,不要变动。
方法3、还没想的,只要能让人你的url保持不变的方法都可行。

一点总结
其实缓存的实现方法,网上有无数的博客都做了详细的说明。这里不做阐述。

出了问题,我为解决这个问题,翻遍了网上的所有博客,以为是缓存使用的不对,还怀疑是自己的拦截器不对,怀疑的问题很对。可是似乎就我这里有问题,博客上没有任何阐述相关问题。大家视乎用的都很顺利。

其实这个问题也不难想到,只是自己当时面对整个未知的框架,未知的缓存,最重要的是觉得未知的太多。所以没有深入的去思考这个问题。

其实我们遇到问题时候,应该静心去思考问题。分析问题,这样我们才能成长,才能进步。我这次就花费了不少时间,问题在于我没有好好静心分析这些问题。希望大家也引以为戒。

最后:有需要Shadowsock翻墙账号可以私聊。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,913评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,025评论 25 709
  • 好久没更新了,今天突然想起
    三千筱夜阅读 1,441评论 0 1
  • 科技,以人为本。—— 题记 我绝不承认我是个懒到骨子里的人,我只是低碳环保嘛。 妈妈说我懒,不叠被子,那是因为要祛...
    他们在干吗阅读 2,571评论 0 0
  • 1.组建一个有凝聚力的团队不容易,斌老师您做到了。特别幸运能够遇到斌老师,并且从您身上进行学习。 今天可能我们29...
    深笑567阅读 1,589评论 0 0

友情链接更多精彩内容