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 .
public Gson providesGson() { return new GsonBuilder().create(); }
. Así que hago esto:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Donde el módulo es una instancia de la clase adecuada que tiene todos estos métodoscompile 'com.squareup.okhttp3:okhttp:3.x.x'
en la importación de gradle como en la respuesta a continuación de TeoEstas respuestas estaban desactualizadas para mí, así que así es como funcionó.
Agregue OkHttp, en mi caso la versión es
3.3.1
:Luego, antes de construir su Retrofit, haga esto:
fuente
fuente
Estoy usando Retrofit 1.9 para obtener un XML .
Si está utilizando Retrofit 1.9.0 y okhttp 2.6.0, agréguelo a su archivo Gradle.
Nota: Si necesita obtener un JSON , simplemente elimínelo del código anterior.
fuente
Para Retrofit1.9 con usuarios de OkHttp3, aquí está la solución,
fuente
fuente
Esta será la mejor manera de establecer el tiempo de espera para cada servicio (pasar el tiempo de espera como parámetro)
Y no te pierdas esto para OkHttpClient.
Espero que esto ayude a cualquiera.
fuente
Encontré este ejemplo
https://github.com/square/retrofit/issues/1557
Aquí configuramos el cliente de conexión de cliente de url personalizado antes de construir la implementación del servicio de descanso API.
fuente
fuente