关于Okhttp缓存的“万种死法”,我get到了一种,HTTP 504 Unsatisfiable Request (only-if-cached)

OkHttp的缓存问题1.使用背景2.错误代码示例3.正解4.总结1.使用背景最近在搞项目,我用的是Retrofit,但考虑到市面上大多用了缓存机制,于是我又封装了一个OkHttpClient,几经波折,程序能跑起来了。但我发现它从未访问过内存,一直是在进行网络请求。2.错误代码示例如果认为自己的缓存有问题,可以看一下这篇博客链接: Android okhttp缓存正确的实现方式.我先把我最初的代码贴出来,看大家能不能发现错误。(1).(2).(3).一开始遇到这个错误,我以为可
摘要由CSDN通过智能技术生成

1.使用背景

最近在搞项目,我用的是Retrofit,但考虑到市面上大多用了缓存机制,于是我又封装了一个OkHttpClient,几经波折,程序能跑起来了。但我发现它从未访问过内存,一直是在进行网络请求。

2.错误代码示例

如果认为自己的缓存有问题,可以看一下这篇博客
链接: Android okhttp缓存正确的实现方式.
我先把我最初的代码贴出来,看大家能不能发现错误。
(1).
在这里插入图片描述
(2).
在这里插入图片描述
(3).
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述一开始遇到这个错误,我以为可能是自己的拦截器有问题,尽管它是对的
我就是怀疑这里,因为感觉只有这里会出问题,检查了几遍之后,确定它没得问题
此时的我心态炸裂,那我认为就只可能是自己的代码逻辑有问题了。
检查逻辑是否出问题了,那我怎么查呀, 都没有报错信息,欸,想到这里,我的内心…
当时我就不乐意了,直接跑去打游戏去了,因为我感觉无从下手
后来的后来,我仔细想了一下,因为用的是MVP架构,我认为应该是逻辑层的执行顺序有问题,但我感觉不太可能,毕竟在有网络时,我是访问到了数据,按理来说,有网,和无网差不多是等效的,谷歌百度都查了,但并不是我想要的那个。
既然网上都没有我想要的那个答案,那么就应该是有一个很细节的地方没注意,那么应该是我封装的问题了。

3.正解

我直接把自己有关Retrofit的封装有写了一遍,这次我发现问题了,可能这个问题大家都没遇到过,真坑。
先上结论吧!
是在OkHttpClient的封装时出了问题,访问不到这个路径下的缓存

File fil

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
抱歉,作为AI语言模型,我不具备实际发送HTTP请求的能力。不过,我可以为您提供Java代码示例,您可以参考该示例来发送HTTP请求。 示例代码如下: ``` import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.Base64; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class HttpPostExample { public static void main(String[] args) throws IOException { OkHttpClient client = new OkHttpClient(); // 构建请求体 MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001"); String requestBodyString = "-----011000010111000001101001\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"example.txt\"\r\n" + "Content-Type: text/plain\r\n" + "\r\n" + "This is an example file.\r\n" + "\r\n" + "-----011000010111000001101001--"; RequestBody requestBody = RequestBody.create(requestBodyString.getBytes(StandardCharsets.UTF_8), mediaType); // 构建请求 String url = "http://example.com/api/upload"; Request request = new Request.Builder() .url(url) .addHeader("requestType-Content", "ModelingStand") .post(requestBody) .build(); // 发送请求并获取响应 Response response = client.newCall(request).execute(); System.out.println(response.body().string()); } } ``` 在上面的示例中,我们使用了OkHttp库发送HTTP请求。首先,我们创建一个OkHttpClient实例。然后,我们构建请求体。在这个例子中,我们使用了multipart/form-data格式的请求体,并添加了一个名为"file"的文件字段。接下来,我们创建一个Request对象,设置请求URL、请求头和请求体。最后,我们使用OkHttpClient发送请求,获取响应并输出响应内容。 请注意,上面的示例中,我们使用了一个固定的请求体字符串。在实际开发中,您需要根据实际情况构建请求体。另外,如果您需要发送其他类型的数据(如JSON或XML),您需要使用相应的MediaType,并将请求体构建为字符串、字节数组或文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值