HttpURLConnection timeout settings HttpURLConnection timeout settings java java

HttpURLConnection timeout settings


HttpURLConnection has a setConnectTimeout method.

Just set the timeout to 5000 milliseconds, and then catch java.net.SocketTimeoutException

Your code should look something like this:

try {   HttpURLConnection.setFollowRedirects(false);   HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();   con.setRequestMethod("HEAD");   con.setConnectTimeout(5000); //set timeout to 5 seconds   return (con.getResponseCode() == HttpURLConnection.HTTP_OK);} catch (java.net.SocketTimeoutException e) {   return false;} catch (java.io.IOException e) {   return false;}


You can set timeout like this,

con.setConnectTimeout(connectTimeout);con.setReadTimeout(socketTimeout);


If the HTTP Connection doesn't timeout, You can implement the timeout checker in the background thread itself (AsyncTask, Service, etc), the following class is an example for Customize AsyncTask which timeout after certain period

public abstract class AsyncTaskWithTimer<Params, Progress, Result> extends    AsyncTask<Params, Progress, Result> {private static final int HTTP_REQUEST_TIMEOUT = 30000;@Overrideprotected Result doInBackground(Params... params) {    createTimeoutListener();    return doInBackgroundImpl(params);}private void createTimeoutListener() {    Thread timeout = new Thread() {        public void run() {            Looper.prepare();            final Handler handler = new Handler();            handler.postDelayed(new Runnable() {                @Override                public void run() {                    if (AsyncTaskWithTimer.this != null                            && AsyncTaskWithTimer.this.getStatus() != Status.FINISHED)                        AsyncTaskWithTimer.this.cancel(true);                    handler.removeCallbacks(this);                    Looper.myLooper().quit();                }            }, HTTP_REQUEST_TIMEOUT);            Looper.loop();        }    };    timeout.start();}abstract protected Result doInBackgroundImpl(Params... params);}

A Sample for this

public class AsyncTaskWithTimerSample extends AsyncTaskWithTimer<Void, Void, Void> {    @Override    protected void onCancelled(Void void) {        Log.d(TAG, "Async Task onCancelled With Result");        super.onCancelled(result);    }    @Override    protected void onCancelled() {        Log.d(TAG, "Async Task onCancelled");        super.onCancelled();    }    @Override    protected Void doInBackgroundImpl(Void... params) {        // Do background work        return null;    }; }