앱을 충돌시키는 "호스트가 해결되지 않음"오류를 피할 수있는 좋은 방법이 있습니까? URL과 같은 호스트에 연결을 시도하고 유효한지 확인하는 일종의 방법입니까?
답변:
URLUtil 을 사용 하여 아래와 같이 URL을 확인합니다.
URLUtil.isValidUrl(url)
그것은 반환 URL이 유효한 경우는 true를 하고 URL이 유효하지 않은 경우는 false .
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;
}
다음과 같이 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 "로 간주 될 URL
.