OkHttp se comporte comme il se doit. Un SocketTimeoutException
se produit lorsque le serveur prend plus de temps à répondre que ce que le client est prêt à attendre, et il abandonne tout simplement. Il y a un délai de lecture par défaut de 10 secondes depuis OkHttp 2.5 (et en incluant le nouveau 3.0), ce qui expliquerait pourquoi vous obtenez l'exception après 15 secondes.
Vous pouvez définir vos propres délais d'attente pour permettre à votre serveur suffisamment de temps pour répondre:
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(20, TimeUnit.SECONDS); // connect timeout
client.setReadTimeout(20, TimeUnit.SECONDS); // socket timeout
Notez que cela ne poignée l'exception, il sera toujours jeté si le client n » t recevoir une réponse en x
secondes maintenant. Je ferais en sorte d'attraper l'exception. Ce serait un endroit approprié pour avoir votre nouvelle tentative.
Puisque vous utilisez RxJava avec Retrofit, vous pouvez simplement ajouter retry/retryWhen
à votre chaîne pour capturer et manipuler SocketTimeoutException
erreurs, et peut-être mélanger même dans exponential backoff.
Je suis coincé à cause de ce comportement de okhttp ... il y a un moyen de le comprendre. –
Est-ce votre problème résolu – mjosh