Ожидается SocketTimeoutException, но не выдается? - PullRequest
1 голос
/ 04 февраля 2012

Я пишу приложение для Android, которое получает данные с сервера. Теоретически не может быть подключения к Интернету, поэтому я пытаюсь уловить этот случай, перехватывая исключение SocketTimeoutException, чтобы показать сообщение об ошибке, экран повторной попытки или что-то еще. К сожалению, это исключение не будет выброшено. По крайней мере, это не входит в предложение catch. Что я делаю не так?

public class HttpConnector {

    private String urlString;
    private int connectionTimeout = 5000; //milliseconds

    public HttpConnector(String urlString)  {
        this.urlString = urlString;
    }

    public String receiveData() throws PolizeiwarnungException {
        URL url = null;
        HttpURLConnection urlConnection = null;
        StringBuffer b = new StringBuffer();

        try {
            url = new URL(urlString);
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(connectionTimeout);
            BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); //Here it gets stuck if there is no connection to the server

            String str;
            while ((str = reader.readLine()) != null) {
                b.append(str + "\n");
            }
        }
        catch (SocketTimeoutException e) {
            //TODO
            e.printStackTrace();
        }
        catch (IOException e) {
            throw new PolizeiwarnungException(e);
        } 
        finally {
            if (urlConnection != null)  {
                urlConnection.disconnect();
            }
        }

        return b.toString();
    }

    public void sendData(String data)  {
        //TODO
    }
}

1 Ответ

1 голос
/ 04 февраля 2012

Вам также необходимо установить время ожидания подключения. Пожалуйста, смотрите эту документацию.

Поскольку конечная точка не существует, без установки времени ожидания подключения время никогда не будет превышено.

setConnectTimeout (int timeout) Устанавливает значение времени ожидания в миллисекундах. для установления соединения с ресурсом, указанным это URLConnection экземпляр.

...