Comment définir HttpResponse délai d'attente pour Android en Java
J'ai créé la fonction suivante pour vérifier l'état de la connexion:
private void checkConnectionStatus() {
HttpClient httpClient = new DefaultHttpClient();
try {
String url = "http://xxx.xxx.xxx.xxx:8000/GaitLink/"
+ strSessionString + "/ConnectionStatus";
Log.d("phobos", "performing get " + url);
HttpGet method = new HttpGet(new URI(url));
HttpResponse response = httpClient.execute(method);
if (response != null) {
String result = getResponse(response.getEntity());
...
Quand j'ai arrêté le serveur pour tester l'exécution attend un long moment à la ligne
HttpResponse response = httpClient.execute(method);
Personne ne sait comment définir le délai d'attente afin d'éviter un temps d'attente trop long?
Merci!
Vous devez vous connecter pour publier un commentaire.
Dans mon exemple, deux délais d'attente sont fixés. Le délai d'attente de connexion jette
java.net.SocketTimeoutException: Socket is not connected
et le délai d'attente du socketjava.net.SocketTimeoutException: The operation timed out
.Si vous souhaitez définir les Paramètres de tous les HTTPClient (par exemple DefaultHttpClient ou AndroidHttpClient) vous pouvez utiliser la fonction setParams().
AndroidHttpClient
? Comment voulez-vous fixer les paramètres?httpParameters
, elle doit montrer à moi, c'exceptions? Ou j'ai juste besoin de l'attraper? parce que les seules exceptions que je peux voir sontClientProtocolException
etIOException
De définir des paramètres sur le client:
J'ai utilisé avec succès sur JellyBean, mais devrait également fonctionner pour les anciennes plates-formes ....
HTH
Si vous êtes à l'aide de Jakarta client http bibliothèque ensuite, vous pouvez faire quelque chose comme:
Si vous utilisez la valeur par défaut du client http, voici comment le faire en utilisant la valeur par défaut http params:
Original de crédit va à http://www.jayway.com/2009/03/17/configuring-timeout-with-apache-httpclient-40/
Pour ceux qui disent que la réponse de @kuester2000 ne fonctionne pas, s'il vous plaît être conscient que les requêtes HTTP, essayez d'abord de trouver l'IP de l'hôte avec une requête DNS, puis fait le réel de la requête HTTP vers le serveur, de sorte que vous pouvez aussi avoir besoin de définir un délai d'attente pour la requête DNS.
Si votre code a fonctionné sans le délai d'attente pour la requête DNS c'est parce que vous êtes en mesure de rejoindre un serveur DNS ou vous frapper de l'Android cache DNS. Par la façon dont vous pouvez effacer ce cache par le redémarrage de l'appareil.
Le présent code s'applique l'original de la réponse à inclure un manuel de recherche DNS avec un délai d'attente:
La méthode la plus utilisée:
Cette classe est de ce blog. Rendez-vous et vérifiez les remarques si vous allez l'utiliser.
vous pouvez créer HttpClient instance par la voie avec Httpclient-android-4.3.5,il peut bien fonctionner.
Une option est d'utiliser le OkHttp client, à partir des Carrés.
Ajouter la bibliothèque de dépendance
Dans la construction.gradle, inclure cette ligne:
Où
x.x.x
est souhaité version de bibliothèque.Définir le client
Par exemple, si vous souhaitez définir un délai d'attente de 60 secondes, le faire de cette façon:
ps: Si votre minSdkVersion est supérieur à 8, vous pouvez utiliser
TimeUnit.MINUTES
. Ainsi, vous pouvez simplement utiliser:Pour plus de détails sur les unités, voir TimeUnit.
Si vous utilisez le
HttpURLConnection
, appelsetConnectTimeout()
comme décrit ici: