Puede establecer tiempos de espera en el cliente HTTP subyacente. Si no especifica un cliente, Retrofit creará uno con tiempos de espera de conexión y lectura predeterminados. Para establecer sus propios tiempos de espera, debe configurar su propio cliente y proporcionarlo al RestAdapter.Builder
.
Una opción es usar el cliente OkHttp , también de Square.
1. Agregar la dependencia de la biblioteca
En build.gradle, incluya esta línea:
compile 'com.squareup.okhttp:okhttp:x.x.x'
¿Dónde x.x.x
está la versión de biblioteca deseada?
2. Establecer el cliente
Por ejemplo, si desea establecer un tiempo de espera de 60 segundos, haga lo siguiente para Retrofit antes de la versión 2 y Okhttp antes de la versión 3 ( PARA LAS VERSIONES MÁS NUEVAS, VEA LAS EDICIONES ):
public RestAdapter providesRestAdapter(Gson gson) {
final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(60, TimeUnit.SECONDS);
okHttpClient.setConnectTimeout(60, TimeUnit.SECONDS);
return new RestAdapter.Builder()
.setEndpoint(BuildConfig.BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.build();
}
EDITAR 1
Para las versiones okhttp desde entonces 3.x.x
, debe establecer la dependencia de esta manera:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
Y configure el cliente usando el patrón de construcción:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Más información en Tiempos de espera
EDITAR 2
Las versiones de actualización ya que 2.x.x
también usan el patrón de construcción, así que cambie el bloque de retorno anterior a esto:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Si usa un código como mi providesRestAdapter
método, cambie el tipo de retorno del método a Retrofit .
Más información en Retrofit 2 - Guía de actualización de 1.9
ps: si tu minSdkVersion es mayor que 8, puedes usar TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Para más detalles sobre las unidades, vea TimeUnit .