如何检查Android中的URL是否有效

时间:2011-02-05 04:10:23

标签: android url url-validation

有没有一种好方法可以避免崩溃应用程序的“主机未解决”错误?某种方式尝试连接到主机(如URL)并查看它是否有效?

12 个答案:

答案 0 :(得分:148)

使用 URLUtil 验证网址,如下所示。

 URLUtil.isValidUrl(url)

如果网址有效,则返回,如果网址无效,则返回 false。

答案 1 :(得分:49)

URLUtil.isValidUrl(url) 

如果这不起作用,您可以使用:

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

答案 2 :(得分:5)

将操作包装在try / catch中。有许多方法可以使URL格式良好但不可检​​索。此外,检查主机名是否存在等测试不能保证任何内容,因为主机可能在检查后无法访问。基本上,没有任何预检查可以保证检索不会失败并抛出异常,因此您最好计划处理异常。

答案 3 :(得分:5)

我会使用此处提到的方法和其他Stackoverflow线程的组合:

{{1}}

答案 4 :(得分:4)

我尝试过很多方法。发现this 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;
}

答案 5 :(得分:3)

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

答案 6 :(得分:3)

在我的情况下Patterns.WEB_URL.matcher(url).matches()在键入String类似于" first.secondword"(我的应用检查用户输入)的情况下无法正常工作。此方法返回true。

URLUtil.isValidUrl(url)对我有效。也许这会对其他人有用

答案 7 :(得分:3)

您可以通过以下方式验证URL:

Patterns.WEB_URL.matcher(potentialUrl).matches()

答案 8 :(得分:2)

只需添加以下代码行:

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

答案 9 :(得分:1)

如果您从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
}

答案 10 :(得分:0)

new java.net.URL(String) throws MalformedURLException

答案 11 :(得分:0)

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()成功,那么如果您仅检查模式以排除像“ URL”之类的简单文本,就将其视为$("iframeId").contents().find("img.ms-dlgCloseBtnImg").attr("src","New Image URL");