web-dev-qa-db-fra.com

Comment vérifier si l'URL est valide dans Android

Existe-t-il un bon moyen d’éviter l’erreur "L’hôte n’est pas résolu" qui plante une application? Une sorte de moyen d'essayer de vous connecter à un hôte (comme une URL) et de voir s'il est même valide?

61
kidalex

Utilisez URLUtil pour valider l’URL comme ci-dessous.

 URLUtil.isValidUrl(url)

Il renverra True si l'URL est valide et false si l'URL est invalide .

142
dd619
URLUtil.isValidUrl(url) 

Si cela ne fonctionne pas, vous pouvez utiliser: 

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

Envelopper l'opération dans un try/catch. Une URL peut être bien formée, mais non récupérable, de plusieurs façons. De plus, des tests tels que voir si le nom d'hôte existe ne garantissent rien car l'hôte pourrait devenir inaccessible juste après la vérification. Fondamentalement, aucun pré-contrôle ne peut garantir que la récupération n'échouera pas et lèvera une exception, il est donc préférable de planifier la gestion des exceptions.

5
Andrew Medico

J'ai essayé beaucoup de méthodes.Et je constate que personne ne fonctionne très bien avec cette URL:

Maintenant, j'utilise ce qui suit et tout se passe bien.

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
androidyue
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;
            }
3
Krzysztof Dziuba

J'utiliserais une combinaison des méthodes mentionnées ici et dans d'autres threads Stackoverflow:

private boolean isValid(String urlString)
{
    try
    {
        URL url = new URL(urlString);
        return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches();
    }
    catch (MalformedURLException e)
    {

    }

    return false;
}
2
Sa Qada

Vous pouvez valider l'URL en procédant comme suit:

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

Dans mon cas, Patterns.WEB_URL.matcher(url).matches() ne fonctionne pas correctement dans le cas où je tape String semblable à "first.secondword" (mon application vérifie les entrées utilisateur). Cette méthode retourne true.

URLUtil.isValidUrl(url) fonctionne correctement pour moi. Peut-être que ce serait utile à quelqu'un d'autre

2
Jackky777
new Java.net.URL(String) throws MalformedURLException
0
kreker

Si vous utilisez from kotlin, vous pouvez créer un String.kt et écrire le code ci-dessous:

fun String.isValidUrl(): Boolean = Patterns.WEB_URL.matcher(this).matches()

Ensuite:

String url = "www.yourUrl.com"
if (!url.isValidUrl()) {
    //some code
}else{
   //some code
}
0
jo jo
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;
    }
}

C'est la solution correcte que j'utilise. L'ajout de https:// avant le texte d'origine empêche un texte tel que "www.cats.com" d'être considéré comme URL. Si new URL() réussit, il suffit alors de cocher le modèle pour exclure des textes simples tels que " https: // cats " à considérer comme URL.

0
Chirila Vasile