121

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

4

12 回答 12

225

使用 URLUtil 验证 URL,如下所示。

 URLUtil.isValidUrl(url)

如果 URL 有效则返回True,如果 URL 无效则返回false

于 2012-12-18T11:29:16.993 回答
85
URLUtil.isValidUrl(url);

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

Patterns.WEB_URL.matcher(url).matches();
于 2014-01-27T10:43:42.933 回答
27

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

public static boolean IsValidUrl(String urlString) {
    try {
        URL url = new URL(urlString);
        return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches();
    } catch (MalformedURLException ignored) {
    }
    return false;
}
于 2016-12-06T14:53:03.167 回答
7

如果您使用 fromkotlin您可以创建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
}
于 2018-09-10T06:53:53.057 回答
5

将操作包装在 try/catch 中。有很多方法可以使 URL 格式正确但不可检索。此外,诸如查看主机名是否存在之类的测试并不能保证任何事情,因为主机可能会在检查后变得无法访问。基本上,再多的预检查都无法保证检索不会失败并抛出异常,因此您最好计划处理异常。

于 2011-02-05T04:35:38.900 回答
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;
}
于 2014-04-30T06:53:18.250 回答
4

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

URLUtil.isValidUrl(url)对我来说正常工作。也许它对其他人有用

于 2017-11-28T12:16:55.157 回答
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;
            }
于 2017-10-27T08:39:39.590 回答
3

只需添加这行代码:

Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();       
于 2020-04-04T14:51:09.053 回答
3

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

Patterns.WEB_URL.matcher(potentialUrl).matches()
于 2018-12-26T14:33:52.670 回答
3
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. 如果成功,那么如果您只是检查模式以排除要考虑的“ https://catsnew URL() ”等简单文本。URL

于 2019-07-05T11:39:50.300 回答
0
new java.net.URL(String) throws MalformedURLException
于 2018-11-29T09:48:01.163 回答