Tworzę aplikację przy użyciu biblioteki OkHttp i nie mogę znaleźć sposobu ustawienia limitu czasu połączenia i limitu czasu gniazda.
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
Odpowiedzi:
Po prostu musisz to zrobić
Należy pamiętać, że wartość zadana w
setReadTimeout
jedną używany wsetSoTimeout
sprawieSocket
wewnętrznie wOkHttp
Connection
.Brak ustawienia limitu czasu
OkHttpClient
jest równoznaczne z ustawieniem wartości0
onsetConnectTimeout
lubsetReadTimeout
i nie spowoduje żadnego limitu czasu. Opis można znaleźć tutaj .Jak wspomniałem @marceloquinta w komentarzach
setWriteTimeout
można również ustawić.Począwszy od wersji 2.5.0 wartości limitu czasu odczytu / zapisu / połączenia są domyślnie ustawione na 10 sekund, jak wspomniano w @ChristerNordvik. Można to zobaczyć tutaj .
Od OkHttp3 można to teraz zrobić za pomocą Buildera w ten sposób
Możesz również wyświetlić przepis tutaj .
źródło
W przypadku okhttp3 to się nieco zmieniło.
Teraz ustawiasz czasy za pomocą kreatora, a nie ustawiaczy, w ten sposób:
Więcej informacji można znaleźć na ich wiki: https://github.com/square/okhttp/blob/b3dcb9b1871325248fba917458658628c44ce8a3/docs/recipes.md#timeouts-kt-java
źródło
W przypadku modernizacji typu Retrofit: 2.0.0-beta4 kod wygląda następująco
źródło
W przypadku Retrofit 2.0.0-beta1 lub beta2 kod wygląda następująco
źródło
źródło
To się teraz zmieniło. wymienić
.Builder()
z.newBuilder()
Od okhttp: 3.9.0 kod wygląda następująco:
źródło
wersja okhttp:
3.11.0
lub nowszaz kodu źródłowego okhttp
unit
może mieć dowolną wartość poniżejprzykładowy kod
Zaktualizowano
Dodałem nowy api do okhttp z wersji
3.12.0
, możesz ustawić limit czasu w ten sposób:UWAGA: Wymaga to API 26+, więc jeśli obsługujesz starsze wersje Androida, nadal używaj
(5, TimeUnit.SECONDS)
.źródło
tak:
źródło
to zadziałało dla mnie ... z https://github.com/square/okhttp/issues/3553
źródło
Jeśli chcesz dostosować konfigurację, użyj najpierw poniższej metodologii tworzenia OKhttpclient, a następnie dodaj do niego konstruktora.
źródło
Możesz ustawić limit czasu wywołania, aby pokryć cały cykl od rozwiązania DNS, nawiązania połączenia, zapisania treści żądania, przetwarzania serwera i odczytania treści odpowiedzi.
źródło