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

问题描述 投票:0回答:12

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

android url url-validation
12个回答
245
投票

使用

URLUtil
验证 URL,如下所示。

URLUtil.isValidUrl(url)

如果 URL

有效
,它将返回 true;如果 URL
无效
,它将返回 false


103
投票
URLUtil.isValidUrl(url);

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

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

31
投票

我会结合使用此处提到的方法和其他 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;
}

8
投票

如果您使用的是

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
}

4
投票

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


4
投票

我尝试了很多方法,发现没有人能很好地使用这个网址:

现在我使用以下内容,一切顺利。

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
投票

在我的情况下,当我输入类似于“first.secondword”的

Patterns.WEB_URL.matcher(url).matches()
(我的应用程序检查用户输入)时,
String
无法正常工作。该方法返回true。

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


4
投票

只需添加这行代码:

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

3
投票

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

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

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
。如果
new URL()
成功,那么如果您只是检查模式以排除像“https://cats”这样的简单文本,则被视为
URL


0
投票
new java.net.URL(String) throws MalformedURLException
© www.soinside.com 2019 - 2024. All rights reserved.