Pat*_*ski 5 java android retrofit okhttp retrofit2
我正在使用改造版本 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();
Run Code Online (Sandbox Code Playgroud)
但是在这个请求仍然持续 10 秒之后,我得到了 SocketTimoutException
编辑
我做了更多的研究,并用不同版本的 Retrofit 对其进行了测试。我停止了改造版本 2.0.1,这个版本也不允许我更改超时:/。有人知道现在该怎么做吗?
编辑 2
我现在有两个地方有这个问题。我将描述用例,因此它可能有助于找到解决方案。
使用 1:
我想从远程服务器下载文件。我调用 Web 服务并等待文件流的响应。我需要等待更长时间,因为 Web 服务需要从数据库中获取文件并将其放入硬盘驱动器(无法更改它)。当文件很大时,将其复制到硬盘需要时间并且应用程序会收到 SocketTimeoutException。
使用2:
我将文件上传到服务器(并且工作正常)。上传后,我需要让 Web 服务知道它应该将文件加载到数据库中。我发送请求,情况与使用1类似,因为当文件很大时,加载需要很多时间并且我得到SocketTimeoutException。
更新
我想澄清一下情况。出现问题是因为我将第二个 OkHttpClient 分配给了重写超时的改造。如果有人会遇到类似的问题,我建议检查是否存在与我面临的情况类似的情况(覆盖超时的第二个 OkHttpClient)。
.writeTimeout您是否尝试在客户端上 设置:
.writeTimeout(50, TimeUnit.SECONDS)
Run Code Online (Sandbox Code Playgroud)
0此外,在测试时,如果您希望请求不超时,您可以将超时持续时间传递给。
此外,如果存在任何连接问题或服务器不可用,请求也会失败。尝试使用Postman发送相同的请求。
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |