我正在使用OkHttp库开发应用程序,问题是我找不到如何设置连接超时和套接字超时.

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder().url(url).build();

Response response = client.newCall(request).execute();

推荐答案

OkHttp3开始,你可以通过Builder这样做

client = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .writeTimeout(10, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

您还可以查看食谱here.

对于旧版本,您只需这样做

OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout
client.setReadTimeout(15, TimeUnit.SECONDS);    // socket timeout

Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();

请注意,setReadTimeout中设置的值是OkHttp Connection类内部SocketsetSoTimeout中使用的值.

不在OkHttpClient上设置任何超时相当于在setConnectTimeoutsetReadTimeout上设置值0,并且根本不会导致超时.描述可以在here处找到.

正如@marceloquinta在 comments 中提到的,也可以设置setWriteTimeout.

2.5.0版开始,读/写/连接超时值默认设置为10秒,如@ChristerNordvik所述.这一点可以从here页上看出来.

Java相关问答推荐

Java -使用空比较或instanceof?

Java事件系统通用转换为有界通配符

如何在SystemiccationRetryListenerSupport中获得类级别的spring retryable annotation中指定的标签?

了解Android Studio中的调试器输出

JVM会优化这个数学运算吗?

为什么我的ArrayList索引的索引总是返回-1?

使用意向过滤器从另一个应用程序启动服务

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

Java流传输一个列表并创建单个对象

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

有没有更快的方法在N个容器中删除重复项?

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

在VS代码中,如何启用Java Main函数的&Q;Run|DEBUG&Q;代码?

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

将JSON字符串转换为Java类

没有Tomcat,IntelliJ如何在本地运行API?

接受类及其接口的Java类型(矛盾)

在权限列表中找不到我的应用程序

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)