我正在開發使用OkHttp庫的應用程序,我的麻煩是我找不到如何設置連接超時和套接字超時。如何使用OkHttp設置連接超時
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
謝謝。
我正在開發使用OkHttp庫的應用程序,我的麻煩是我找不到如何設置連接超時和套接字超時。如何使用OkHttp設置連接超時
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
謝謝。
您只需做到這一點
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
類setSoTimeout
用在Socket
內部的一個。
在OkHttpClient
上未設置任何超時值相當於在setConnectTimeout
或setReadTimeout
上設置值0
,並且根本不會導致超時。說明可以發現here。
正如@marceloquinta在評論中提到的setWriteTimeout
也可以設置。
從版本2.5.0開始,默認情況下,讀/寫/連接超時值默認設置爲10秒,如@ChristerNordvik所述。這可以看到here。
由於OkHttp3的現在可以通過Builder像這樣
client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
您還可以查看配方here
對於改造2.0.0-β1或β2,代碼去如下
做到這一點OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(30, TimeUnit.SECONDS);
client.setReadTimeout(30, TimeUnit.SECONDS);
client.setWriteTimeout(30, TimeUnit.SECONDS);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.yourapp.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
對於okhttp3,這已經改變了一下。
現在,您使用的建設者,而不是制定者,像這樣成立時間:
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
更多信息可以在自己的wiki上找到: https://github.com/square/okhttp/wiki/Recipes#timeouts
也適用於v 3.0.1。謝謝 – MBH 2016-01-22 14:58:35
對於改裝改裝:2.0.0 -beta4代碼去如下
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.yourapp.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
像這樣:
//New Request
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
final OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
//add in gradle and sync
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.google.code.gson:gson:2.6.2'
import okhttp3.OkHttpClient;
import okhttp3.OkHttpClient.Builder;
Builder b = new Builder();
b.readTimeout(200, TimeUnit.MILLISECONDS);
b.writeTimeout(600, TimeUnit.MILLISECONDS);
// set other properties
OkHttpClient client = b.build();
它現在已經改變。與.newBuilder()
由於okhttp的更換.Builder()
:3.9.0 如下圖所示:
OkHttpClient okHttpClient = new OkHttpClient()
.newBuilder()
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.build();
您選擇的答案是不再有效。也許你應該編輯問題來指定okhttp的版本。 – Theyouthis 2016-01-27 22:34:09