Vous pouvez définir des délais d'expiration sur le client HTTP sous-jacent. Si vous ne spécifiez pas de client, Retrofit en créera un avec les délais de connexion et de lecture par défaut. Pour définir vos propres délais, vous devez configurer votre propre client et le fournir auRestAdapter.Builder
.
Une option consiste à utiliser le client OkHttp , également de Square.
1. Ajoutez la dépendance de bibliothèque
Dans build.gradle, incluez cette ligne:
compile 'com.squareup.okhttp:okhttp:x.x.x'
Où x.x.x
est la version de bibliothèque souhaitée.
2. Définissez le client
Par exemple, si vous souhaitez définir un délai d'expiration de 60 secondes, procédez comme suit pour Retrofit avant la version 2 et Okhttp avant la version 3 ( POUR LES NOUVELLES VERSIONS, VOIR LES MODIFICATIONS ):
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();
}
MODIFIER 1
Pour les versions okhttp depuis 3.x.x
, vous devez définir la dépendance de cette façon:
compile 'com.squareup.okhttp3:okhttp:x.x.x'
Et définissez le client à l'aide du modèle de générateur:
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
Plus d'informations dans Timeouts
MODIFIER 2
Les versions de mise à niveau 2.x.x
utilisent également le modèle de générateur, alors changez le bloc de retour ci-dessus en ceci:
return new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
Si vous utilisez un code comme ma providesRestAdapter
méthode, changez le type de retour de méthode en Retrofit .
Plus d'informations dans Retrofit 2 - Guide de mise à niveau à partir de 1.9
ps: Si votre minSdkVersion est supérieure à 8, vous pouvez utiliser TimeUnit.MINUTES
:
okHttpClient.setReadTimeout(1, TimeUnit.MINUTES);
okHttpClient.setConnectTimeout(1, TimeUnit.MINUTES);
Pour plus de détails sur les unités, voir TimeUnit .