我正在使用改装版本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:
我想从远程服务器下载文件。我调用Web服务,然后等待文件流的响应。我需要等待更长时间,因为Web服务需要从数据库获取文件并将其放入硬盘驱动器(不可能更改它)。当文件大的时候将它复制到硬盘驱动器需要时间并且应用程序收到SocketTimeoutException。
使用2:
我将文件上传到服务器(它工作正常)。上传后我需要让Web服务知道它应该将文件加载到数据库中。我发送请求和情况类似于使用1,因为当文件很大时,加载需要很长时间,我得到SocketTimeoutException。
更新
我想澄清情况。问题出现了,因为我有第二个分配给Retrofit的OkHttpClient,它覆盖了超时。如果有人会遇到类似的问题我建议检查是否存在与我面临的情况类似的情况(第二个OkHttpClient覆盖超时)。
答案 0 :(得分:0)
您是否尝试在客户端设置.writeTimeout
:
.writeTimeout(50, TimeUnit.SECONDS)
同样在测试时,如果您希望请求不会超时,可以将超时持续时间传递给0
。
此外,如果存在任何连接问题或服务器不可用,请求将失败。尝试使用Postman发送相同的请求。