Android에서 URL이 유효한지 확인하는 방법


92

앱을 충돌시키는 "호스트가 해결되지 않음"오류를 피할 수있는 좋은 방법이 있습니까? URL과 같은 호스트에 연결을 시도하고 유효한지 확인하는 일종의 방법입니까?


호스트에 어떻게 연결하고 있습니까?
SteelBytes

답변:


192

URLUtil 을 사용 하여 아래와 같이 URL을 확인합니다.

 URLUtil.isValidUrl(url)

그것은 반환 URL이 유효한 경우는 true를 하고 URL이 유효하지 않은 경우는 false .


isValidUrl은 다음 URL에 대해 false를 반환하지만 장치가 만족스러워 보이지만 파일 뒤에 이중 슬래시가 없습니다. "파일 : /storage/emulated/0/Android/data/com.samsung.android.app.pinboard/files/ClipData/Screenshot_NormarAppImage.png"
톰 Hamshere

7
이 방법은 깊은 유효성 검사를 수행하지 않고 대부분의 간단한 WebView 사례 만 수행하므로이 방법에 의존하지 않습니다. 출처
marwinXXII 2014-06-08


1
이 한 것처럼 보인다 http://또는 https://그것이 사실 반환합니다
도니는 다르게

이것이 mailto : abc@xyz.com 및 about : blank # blocked와 같은 URL을 피하는 데 도움이됩니까?
RamPrasadBismil

69
URLUtil.isValidUrl(url);

이것이 작동하지 않으면 다음을 사용할 수 있습니다.

Patterns.WEB_URL.matcher(url).matches();

URL이 실제로 활성화되었는지 여부가 아니라 패턴 만 확인하는 것이 아닙니까?
Declan McKenna

1
내가 아는 한, url이 실제로 핑하는지 여부를 확인해야하는 경우 HttpURLConnection 클래스를 사용하여 수동으로 확인해야합니다.
Pranav

스키마없이 URL을 확인해야하는 경우 두 번째 옵션을 사용하십시오. 스키마가 추가되지 않은 경우 URLUtil.isValidUrl은 false를 반환합니다.
user3783123

URL 확인 방법은 https:////testtovation.com
Manikandan K

18

여기에 언급 된 방법과 다른 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;
}

5

작업을 try / catch로 래핑합니다. URL을 올바르게 구성 할 수 있지만 검색 할 수없는 방법은 여러 가지가 있습니다. 또한 호스트 이름이 있는지 확인하는 것과 같은 테스트는 확인 직후 호스트에 연결할 수 없게 될 수 있기 때문에 아무것도 보장하지 않습니다. 기본적으로 사전 검사가 아무리 많아도 검색이 실패하지 않고 예외가 발생하지 않도록 보장 할 수 없으므로 예외 처리 계획을 세우는 것이 좋습니다.


예외 처리는 신경 쓰지 않지만 예외로 인해 앱이 충돌하지 않도록하려면 어떻게해야합니까?
kidalex 2011-02-05

4
@kidalex Err, 예외를 잡아 ? '예외 처리'는 어떤 의미일까요?
론의 후작

4

나는 많은 방법을 시도했지만 아무도이 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;
}

4
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;
            }

4

제 경우 Patterns.WEB_URL.matcher(url).matches()에는 String"first.secondword"(내 앱이 사용자 입력을 확인합니다)와 유사한 입력을하면 제대로 작동하지 않습니다 . 이 메서드는 true를 반환합니다.

URLUtil.isValidUrl(url)나를 위해 올바르게 작동합니다. 다른 사람에게 유용 할 수도 있습니다.


4

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
}


2
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.


2

다음 코드 줄을 추가하십시오.

Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();       

0
new java.net.URL(String) throws MalformedURLException
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.