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.