Есть ли хороший способ избежать ошибки «хост не разрешен», которая приводит к сбою приложения? Какой-то способ попробовать подключиться к хосту (например, URL-адрес) и посмотреть, действительно ли он действителен?
android
url
url-validation
кидалекс
источник
источник
Ответы:
Используйте URLUtil для проверки URL, как показано ниже.
URLUtil.isValidUrl(url)
Он вернет True, если URL-адрес действителен, и false, если URL-адрес недействителен .
источник
http://
илиhttps://
оно вернется, правдаURLUtil.isValidUrl(url);
Если это не сработает, вы можете использовать:
Patterns.WEB_URL.matcher(url).matches();
источник
Я бы использовал комбинацию методов, упомянутых здесь и в других потоках Stackoverflow:
private boolean isValid(String urlString) { try { URL url = new URL(urlString); return URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches(); } catch (MalformedURLException e) { } return false; }
источник
Оберните операцию в try / catch. Есть много способов, которыми URL-адрес может быть правильно сформирован, но не извлекаемым. Кроме того, такие тесты, как проверка существования имени хоста, ничего не гарантируют, потому что хост может стать недоступным сразу после проверки. По сути, никакая предварительная проверка не может гарантировать, что извлечение не завершится ошибкой и не вызовет исключения, поэтому лучше спланировать обработку исключений.
источник
Я перепробовал множество методов и обнаружил, что никто не работает нормально с этим URL:
Сейчас использую следующее, и все идет хорошо.
public static boolean checkURL(CharSequence input) { if (TextUtils.isEmpty(input)) { return false; } Pattern URL_PATTERN = Patterns.WEB_URL; boolean isURL = URL_PATTERN.matcher(input).matches(); if (!isURL) { String urlString = input + ""; if (URLUtil.isNetworkUrl(urlString)) { try { new URL(urlString); isURL = true; } catch (Exception e) { } } } return isURL; }
источник
import okhttp3.HttpUrl; import android.util.Patterns; import android.webkit.URLUtil; if (!Patterns.WEB_URL.matcher(url).matches()) { error.setText(R.string.wrong_server_address); return; } if (HttpUrl.parse(url) == null) { error.setText(R.string.wrong_server_address); return; } if (!URLUtil.isValidUrl(url)) { error.setText(R.string.wrong_server_address); return; } if (!url.substring(0,7).contains("http://") & !url.substring(0,8).contains("https://")) { error.setText(R.string.wrong_server_address); return; }
источник
В моем случае
Patterns.WEB_URL.matcher(url).matches()
некорректно работает в том случае, когда яString
печатаю аналогично «first.secondword» (мое приложение проверяет ввод пользователя). Этот метод возвращает истину.URLUtil.isValidUrl(url)
у меня работает правильно. Может быть было бы полезно еще кому-нибудьисточник
Если вы используете from,
kotlin
вы можете создатьString.kt
и написать следующий код:fun String.isValidUrl(): Boolean = Patterns.WEB_URL.matcher(this).matches()
Затем:
String url = "www.yourUrl.com" if (!url.isValidUrl()) { //some code }else{ //some code }
источник
Вы можете проверить URL следующим образом:
Patterns.WEB_URL.matcher(potentialUrl).matches()
источник
public static boolean isURL(String text) { String tempString = text; if (!text.startsWith("http")) { tempString = "https://" + tempString; } try { new URL(tempString).toURI(); return Patterns.WEB_URL.matcher(tempString).matches(); } catch (MalformedURLException | URISyntaxException e) { e.printStackTrace(); return false; } }
Это правильное решение, которое я использую. Добавление
https://
перед исходным текстом предотвращает рассмотрение текста типа «www.cats.com» какURL
. В случаеnew URL()
успеха, просто отметьте шаблон, чтобы исключить простые тексты вроде « https: // cats »URL
.источник
Просто добавьте эту строку кода:
Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
источник
new java.net.URL(String) throws MalformedURLException
источник