2014-09-20 25 views
101

Rozwijam aplikację przy użyciu biblioteki OkHttp i mój problem polega na tym, że nie mogę znaleźć ustawienia limitu czasu połączenia i limitu czasu gniazda.Jak ustawić limit czasu połączenia za pomocą OkHttp

OkHttpClient client = new OkHttpClient(); 

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

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

Dzięki.

+2

Odpowiedź została wybrana opcja nie jest już ważny. Może powinieneś edytować pytanie, aby określić wersję okhttp. – Theyouthis

Odpowiedz

202

Po prostu musisz to zrobić

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(); 

Należy pamiętać, że wartość ustawiona w setReadTimeout jest jeden używany w setSoTimeout na Socket wewnętrznie w klasie OkHttpConnection.

niewprowadzanie żadnych czas oczekiwania na OkHttpClient jest odpowiednikiem ustawiania wartości 0 na setConnectTimeout lub setReadTimeout i spowoduje brak limitu czasu w ogóle. Opis można znaleźć here.

Jak wspomniano w @marceloquinta w komentarzach setWriteTimeout można również ustawić.

Od wersji 2.5.0 wartości odczytu/zapisu/łączenia są ustawione domyślnie na 10 sekund, jak wspomina @ChristerNordvik. Można to zobaczyć here.

Od OkHttp3 może teraz zrobić to poprzez Builder jak tak

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

Możesz również przeglądać receptury here

+0

Cześć, dobrze, ale jak ustawić limit czasu gniazda? – kelvincer

+0

@kelvincer Zaktualizowałem swoją odpowiedź, by adresować to, okrzyki! –

+0

Dzięki za poświęcony czas – kelvincer

6

do modernizacji 2.0.0-beta1 i beta2, kod wygląda następująco

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(); 
81

Dla okhttp3 to trochę się zmieniło.

Teraz skonfigurować razy korzystania z generatora, a nie ustawiające, tak:

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

Więcej informacji można znaleźć w ich wiki: https://github.com/square/okhttp/wiki/Recipes#timeouts

+1

działa również w wersji 3.0.1. dzięki – MBH

8

do modernizacji modernizacji: 2.0.0 -beta4 kod wygląda następująco

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(); 
3

tak:

//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(); 
5
//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(); 
0

To się teraz zmieniło. Wymienić .Builder() z .newBuilder()

As of okhttp: 3.9.0 jak pokazano poniżej:

OkHttpClient okHttpClient = new OkHttpClient() 
    .newBuilder() 
    .connectTimeout(10,TimeUnit.SECONDS) 
    .writeTimeout(10,TimeUnit.SECONDS) 
    .readTimeout(30,TimeUnit.SECONDS) 
    .build(); 
Powiązane problemy