java - 改造自定义超时不起作用

标签 java android retrofit retrofit2 okhttp

我正在使用改造版本 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/

相关文章:

java - 从 String className 获取可抛出的类对象

android - 改造中的 SocketTimeoutException

android - 使用 API 电影 DB 改造库

java - 我的程序做错了什么?

java - 使用java编辑html页面

java - GAE 推送通知

android - Lint : "Newer Library Versions Available" when using variables

android - android hierarchyviewer 中没有渲染时间信息

android - 如何创建多语言安卓应用程序?

android - 改造 2 : How to upload image with JSONObject in android