I'm writing an application that connects to a webservice and I don't want it to wait too long if it can't get a connection. I therefore set the connectionTimeout of the httpparams. But it doesn't seem to have any effect whatsoever.
To test I turn of my WLAN temporarily. The application tries to connect for quite some time (way more than the 3 seconds I want) and then throws an UnknownHostException.
Here is my code:
try{ HttpClient httpclient = new DefaultHttpClient(); HttpParams params = httpclient.getParams(); HttpConnectionParams.setConnectionTimeout(params, 3000); HttpConnectionParams.setSoTimeout(params, 3000); httppost = new HttpPost(URL); StringEntity se = new StringEntity(envelope,HTTP.UTF_8); httppost.setEntity(se); //Code stops here until UnknownHostException is thrown. BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost); HttpEntity entity = httpResponse.getEntity(); return entity; }catch (Exception e){ e.printStackTrace(); }
Anyone have any ideas what I missed?
Restart your device. Open your Settings app and tap Network & internet or Connections. Depending on your device, these options may be different. Turn Wi-Fi off and mobile data on, and check if there's a difference. If not, turn mobile data off and Wi-Fi on and check again.
If the server takes so long to respond, a timeout error displays. This error is meant to prevent devices from waiting ceaselessly for the server to respond. The possible causes may be a server issue, outdated browser and cache, blacklisted sites, sporadic internet connection, faulty extensions, etc.
A server connection timeout means that a server is taking too long to reply to a data request made from another device.
Try to do it this way:
HttpPost httpPost = new HttpPost(url); StringEntity se = new StringEntity(envelope,HTTP.UTF_8); httpPost.setEntity(se); HttpParams httpParameters = new BasicHttpParams(); // Set the timeout in milliseconds until a connection is established. int timeoutConnection = 3000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); // Set the default socket timeout (SO_TIMEOUT) // in milliseconds which is the timeout for waiting for data. int timeoutSocket = 3000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); BasicHttpResponse httpResponse = (BasicHttpResponse) httpClient.execute(httpPost); HttpEntity entity = httpResponse.getEntity(); return entity;
You then can catch a possible ConnectTimeoutException
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With