Pour gérer le Timeout de Android Volley, vous devez utiliser Politique de réessai
Politique de réessai
- Volley offre un moyen simple d'implémenter votre RetryPolicy pour vos demandes.
- Volley fixe le délai par défaut de Socket & ConnectionTImeout à 5 secondes pour toutes les demandes.
RetryPolicy
est une interface dans laquelle vous devez implémenter votre logique sur la façon dont vous voulez réessayer une demande particulière lorsqu'un dépassement de délai se produit.
Elle porte sur les trois paramètres suivants
- Timeout - Spécifie le délai d'attente du socket en millisecondes pour chaque tentative de réessai.
- Number Of Retries - Nombre de tentatives de réessai.
- Back Off Multiplier - Un multiplicateur qui est utilisé pour déterminer le temps exponentiel fixé au socket pour chaque tentative de réessai.
Par ex. Si RetryPolicy est créé avec les valeurs suivantes
Délai d'attente - 3000 secondes, Nombre de tentatives - 2, Multiplicateur de recul - 2
Tentative 1 :
- temps = temps + (temps * Multiplicateur d'arrêt) ;
- temps = 3000 + 6000 = 9000
- Socket Timeout = time ;
- La demande a été envoyée avec un délai d'attente de 9 secondes.
Tentative 2 :
- temps = temps + (temps * Multiplicateur de Back Off) ;
- temps = 9000 + 18000 = 27000
- Socket Timeout = time ;
- La demande a été envoyée avec un délai d'attente de 27 secondes.
Donc à la fin de Tentative 2 Si le délai d'attente de la connexion se prolonge, Volley envoie un TimeoutError dans le gestionnaire de réponse d'erreur de l'interface utilisateur.
//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
0 votes
Duplicata possible : stackoverflow.com/questions/693997/
24 votes
@AdamStelmaszczyk - Il ne s'agit pas d'un doublon car il s'agit de détails spécifiques au cadre Volley. La question de l'OS référencée concerne l'utilisation de la balise
HttpClient
classe.