java - Cómo establecer el tiempo de espera de conexión con OkHttp
okhttp3 timeout (8)
Ha cambiado ahora. Reemplace .Builder()
con .newBuilder()
A partir de okhttp: 3.9.0 el código es el siguiente:
OkHttpClient okHttpClient = new OkHttpClient()
.newBuilder()
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.build();
Estoy desarrollando una aplicación usando la biblioteca OkHttp y mi problema es que no puedo encontrar cómo configurar el tiempo de espera de la conexión y el tiempo de espera del socket.
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
Gracias.
Para Retrofit 2.0.0-beta1 o beta2, el código es el siguiente
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();
Para la modificación de Retrofit: 2.0.0-beta4 el código es el siguiente
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();
Para okhttp3 esto ha cambiado un poco.
Ahora configura los tiempos usando el constructor, y no los setters, así:
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Se puede encontrar más información en su wiki: https://github.com/square/okhttp/wiki/Recipes#timeouts
Simplemente tienes que hacer esto
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();
Tenga en cuenta que el valor establecido en setReadTimeout
es el utilizado en setSoTimeout
en el Socket
internamente en la clase OkHttp
Connection
.
No establecer ningún tiempo de espera en OkHttpClient
equivale a establecer un valor de 0
en setConnectTimeout
o setReadTimeout
y no generará ningún tiempo de espera. Descripción se puede encontrar here .
Como mencionó @marceloquinta en los comentarios setWriteTimeout
también se puede configurar.
A partir de la versión 2.5.0, los valores de tiempo de espera de lectura / escritura / conexión se establecen en 10 segundos de forma predeterminada, tal como lo menciona @ChristerNordvik. Esto se puede ver here .
A partir de OkHttp3 ahora puede hacer esto a través del Builder como tal
client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
También puedes ver la receta here
al igual que:
//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();
esto funcionó para mí ... de https://github.com/square/okhttp/issues/3553
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(false) <-- not necessary but useful!
.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();