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 .
public Gson providesGson() { return new GsonBuilder().create(); }
. Donc , je fais ceci:Gson gson = module.providesGson(); RestAdapter adapter = module.providesRestAdapter(gson);
. Où module est une instance de la classe appropriée qui a toutes ces méthodescompile 'com.squareup.okhttp3:okhttp:3.x.x'
dans l'importation gradle comme dans la réponse ci-dessous par TeoCes réponses étaient dépassées pour moi, alors voici comment cela a fonctionné.
Ajoutez OkHttp, dans mon cas, la version est
3.3.1
:Ensuite, avant de construire votre Retrofit, procédez comme suit:
la source
la source
J'utilise Retrofit 1.9 pour obtenir un XML .
Si vous utilisez Retrofit 1.9.0 et okhttp 2.6.0, ajoutez à votre fichier Gradle.
Remarque: Si vous devez récupérer un JSON , supprimez simplement du code ci-dessus.
la source
Pour Retrofit1.9 avec les utilisateurs d'OkHttp3, voici la solution,
la source
la source
Ce sera le meilleur moyen, de définir le délai d'expiration pour chaque service (en passant le délai d'expiration en paramètre)
Et ne manquez pas cela pour OkHttpClient.
J'espère que cela aidera n'importe qui.
la source
J'ai trouvé cet exemple
https://github.com/square/retrofit/issues/1557
Ici, nous définissons un client de connexion client URL personnalisé avant de créer l'implémentation du service de repos API.
la source
la source