Ich entwickle eine App mit der OkHttp-Bibliothek und habe das Problem, dass ich nicht feststellen kann, wie das Verbindungszeitlimit und das Socket-Zeitlimit festgelegt werden.
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
Antworten:
Sie müssen dies einfach tun
Beachten Sie, dass der eingestellte Wert
setReadTimeout
derjenige ist,setSoTimeout
derSocket
intern im Internet verwendet wirdOkHttp
Connection
Klasse verwendet wird.Das Nichteinstellen einer Zeitüberschreitung auf dem
OkHttpClient
entspricht dem Festlegen eines Werts von0
aufsetConnectTimeout
odersetReadTimeout
und führt zu keiner Zeitüberschreitung. Beschreibung kann gefunden werden hier .Wie von @marceloquinta in den Kommentaren erwähnt
setWriteTimeout
kann auch eingestellt werden.Ab Version 2.5.0 sind die Zeitlimitwerte für Lesen, Schreiben und Verbinden standardmäßig auf 10 Sekunden festgelegt, wie von @ChristerNordvik angegeben. Dies kann hier gesehen werden .
Ab OkHttp3 kann dies nun über den Builder so geschehen
Sie können das Rezept auch hier anzeigen .
quelle
Für okhttp3 hat sich dies etwas geändert.
Jetzt richten Sie die Zeiten mit dem Builder ein und nicht mit Setzern wie folgt:
Weitere Informationen finden Sie in ihrem Wiki: https://github.com/square/okhttp/blob/b3dcb9b1871325248fba917458658628c44ce8a3/docs/recipes.md#timeouts-kt-java
quelle
Für die Nachrüstung von Retrofit: 2.0.0-beta4 lautet der Code wie folgt
quelle
Für Retrofit 2.0.0-beta1 oder beta2 lautet der Code wie folgt
quelle
quelle
Es hat sich jetzt geändert. Ersetzen
.Builder()
durch.newBuilder()
Ab okhttp: 3.9.0 lautet der Code wie folgt:
quelle
okhttp version:
3.11.0
oder höheraus okhttp Quellcode
unit
kann ein beliebiger Wert von unten seinBeispielcode
Aktualisiert
Ich habe eine neue API zu okhttp von der Version hinzugefügt
3.12.0
, Sie können Timeout wie folgt einstellen:HINWEIS: Dies erfordert API 26+. Wenn Sie ältere Versionen von Android unterstützen, verwenden Sie diese weiterhin
(5, TimeUnit.SECONDS)
.quelle
wie so:
quelle
Das hat bei mir funktioniert ... von https://github.com/square/okhttp/issues/3553
quelle
Wenn Sie die Konfiguration anpassen möchten, verwenden Sie zuerst die folgende Methode, um OKhttpclient zu erstellen, und fügen Sie dann einen Builder hinzu.
quelle
Sie können ein Anrufzeitlimit festlegen, das den gesamten Zyklus abdeckt, indem DNS aufgelöst, eine Verbindung hergestellt, der Anforderungshauptteil geschrieben, der Server verarbeitet und der Antworttext gelesen wird.
quelle