HttpURLConnection setConnectTimeout() n'a aucun effet
Je me connecte à un simple flux RSS en utilisant HTTPUrlConnection. Il fonctionne parfaitement. Je tiens à ajouter un délai d'attente de la connexion, car je ne veux pas que mon application est suspendue dans le cas d'une mauvaise connexion ou quoi que ce soit. C'est le code que j'utilise et la setConnectTimeout méthode n'a aucun effet que ce soit.
HttpURLConnection http = (HttpURLConnection) mURL.openConnection();
http.setConnectTimeout(15000); //timeout after 15 seconds
...
Si ça aide, je suis en développement sur android.
- Deux choses pour votre considération. Si vous ne voulez pas que votre app à accrocher, mettez votre méthode de connexion dans un thread séparé. Deuxièmement, vous avez dit qu'il "travaillé" parfaitement, que faites-vous pour simuler une mauvaise connexion?
- Je l'ai dans un sujet séparé, à l'aide d'un progressdialog. Ce qui est généralement ce qui arrive est si la connexion est bonne la tâche fait sa chose. Mais si la connexion est mauvaise, la progressdialog séjours pour les âges. Pour simuler une mauvaise connexion, je suis à la réduction de la durée du délai. Au lieu de donner des 15 secondes, 1 seconde. Juste pour le test. Ou est-ce mal?
- HttpURLConnection.setReadTimeout(mili s);
- merci de partager pleins de code de connexion réseau
Vous devez vous connecter pour publier un commentaire.
Vous devriez essayer de définir le délai d'attente ainsi (
http.setReadTimeout()
). Souvent, un serveur web serons heureux d'accepter votre connexion, mais il peut être lent à répondre à la demande.Vous avez probablement/les deux:
1) Ne pas lire quoi que ce soit à partir d'une connexion
2) Ne pas prendre & gérer l'exception correctement
Comme mentionné ici, utiliser la logique similaire à ceci:
J'ai eu un problème similaire - parce que le HttpUrlConnection n'aurez pas le temps mi-télécharger. Par exemple, si vous désactivez le wifi quand le téléchargement est en cours, la mine a continué à dire que c'est en cours de téléchargement, coincé au même pourcentage.
J'ai trouvé une solution, à l'aide d'un TimerTask, connecté à un AsyncTask nommé DownloaderTask. Essayez:
Puis dans le téléchargement de la boucle de définir un minuteur de délai d'erreur:
Cas de dépassement de délai, et ne télécharge pas même 1K en 20 secondes, il annule au lieu d'apparaître pour toujours téléchargement.
J'ai été confronté au même problème. Réglage de la
connectionTimeout
etreadTimeout
ne semble pas revenir à l'exception, comme attendu, mais prenez vraiment. Il m'a fallu un moment pour vérifier l'URLConnection()
Méthode et de comprendre ce qui se passe. Dans la documentation desetConnectTimeout
il y a un avertissement"si le nom d'hôte décide de multiples adresses IP, ce client va tenter chaque. En cas de connexion à chacune de ces adresses échoue, plusieurs délais d'attente vont s'écouler avant que la tentative de connexion déclenche une exception."
Cela signifie s si vous avez 10 ips résolu par votre hôte, votre temps sera "10*readTimeoutSet".
Vous pouvez vérifier les ips pour le nom d'hôte ici
Il est causé par:
1. Vous êtes connecté au wifi mais vous n'avez pas de connexion internet.
2. Vous êtes connecté sur le réseau GSM de données, mais votre transfert est très pauvre.
Dans les deux cas, vous obtenez un hôte d'exception après environ 20 secondes. À mon avis, la meilleure façon de l'obtenir correcte est:
rappelez-vous - utiliser dans asynctask ou d'un service.
Sa solution simple, vous démarrez à nouveau Thread avec HttpUrlConnection (n'oubliez pas d'utiliser la méthode start() de ne pas exécuter()). Que dans la boucle while vous êtes en attente de 3 secondes pour le résultat. Si rien dans les parages de retour faux. De cette façon, vous permettent d'éviter les files d'attente pour l'hôte d'exception et d'éviter des problèmes avec pas de travail setConnectTimeout() quand vous n'avez pas de connexion internet.
Essayez de définir la
ConnectionTimeout
avant l'ouverture de la connexion.