我正在使用改造版本 2.3.0 和 OkHttp 版本 3.8.1。我面临无法更改请求超时的问题。我在谷歌中搜索答案,只有一种解决方案 - 在 OkHttpClient 中更改超时并将其设置为改造构建器,但它不起作用:/。这是我用于更改超时的代码:
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson));
builder.client(new OkHttpClient.Builder()
.connectTimeout(50000, TimeUnit.MILLISECONDS)
.readTimeout(50000, TimeUnit.MILLISECONDS).build());
retrofit = builder.build();
但是在这个请求仍然持续 10 秒之后我得到 SocketTimoutException
编辑
我做了更多的研究,并用不同版本的 Retrofit 对其进行了测试。我停止了改造版本 2.0.1,这个版本也不允许我更改超时:/。有人知道现在该做什么吗?
编辑 2
我现在有两个地方有这个问题。我将描述用例,这样可能有助于找到解决方案。
使用 1:
我想从远程服务器下载文件。我调用网络服务并等待文件流的响应。我需要等待更长的时间,因为网络服务需要从数据库中获取文件并将其放入硬盘(不可能更改它)。当文件很大时将其复制到硬盘驱动器需要时间并且应用程序会收到 SocketTimeoutException。
使用 2:
我将文件上传到服务器(并且工作正常)。上传后我需要让网络服务知道它应该将文件加载到数据库中。我发送请求,情况与使用 1 类似,因为当文件很大时,加载需要很长时间,并且我得到 SocketTimeoutException。
更新
我想澄清一下情况。出现问题是因为我将第二个 OkHttpClient 分配给了重写超时的 Retrofit。如果有人遇到类似的问题,我建议检查是否存在与我遇到的情况类似的情况(第二个覆盖超时的 OkHttpClient)。
最佳答案
您是否尝试在客户端设置 .writeTimeout
:
.writeTimeout(50, TimeUnit.SECONDS)
此外,在测试时,如果您希望请求不超时,您可以将超时持续时间传递给 0
。
此外,如果存在任何连接问题或服务器不可用,请求将失败。尝试使用 Postman 发送相同的请求.
关于java - 改造自定义超时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858527/