Я хочу вернуть false, если для подключения URL-адреса требуется более 5 секунд - как это возможно с использованием Java? Вот код, который я использую, чтобы проверить, действителен ли URL
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("HEAD");
return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
java.net.ConnectException: Connection timed out: connect
до того, как истекло 2 минуты. Вы знаете, что вызывает проблему?setConnectTimeout
перед любым из методов, которые неявно подключаются (в основном все методы, которые вызывают IllegalStateException, если они уже подключены). В идеале первым вызываемым методом сделайте setConnectTimeout (readTimeout).con.setReadTimeout()
все заработало как положено.Вы можете установить тайм-аут следующим образом:
источник
Если HTTP-соединение не истекает, вы можете реализовать проверку времени ожидания в самом фоновом потоке (AsyncTask, Service и т. Д.), Следующий класс является примером для настройки AsyncTask, время ожидания которого истекает через определенный период.
Образец для этого
источник
onPreExecute()
. Кроме того, если вы отмените задачу вручную, вы также должны отменить запланированный вызов, чтобы избежать утечек.Я мог бы получить решение такой похожей проблемы, добавив простую строку
Мое требование состояло в том, чтобы знать код ответа, и для этого было достаточно просто получить метаинформацию, вместо получения полного тела ответа.
Метод запроса по умолчанию - GET, и для его возврата потребовалось много времени, и я, наконец, выбросил SocketTimeoutException. Ответ был довольно быстрым, когда я установил для метода запроса значение HEAD.
источник
HEAD
запрос, который не приведет к созданию тела ответа..setRequestMethod("HEAD")
в своем коде. Как ни странно, это описание было именно тем, что мне нужно, чтобы уменьшить мою проблему «Слишком много открытых файлов». Так что спасибо?