wake-up-neo.com

So prüfen Sie, ob die URL in Android gültig ist

Gibt es eine gute Möglichkeit, den Fehler "Host ist nicht gelöst" zu vermeiden, durch den eine App abstürzt? Eine Art und Weise, eine Verbindung zu einem Host herzustellen (z. B. eine URL) und festzustellen, ob er überhaupt gültig ist?

61
kidalex

Verwenden Sie URLUtil , um die URL wie folgt zu überprüfen.

 URLUtil.isValidUrl(url)

Es wird zurückgegeben True, wenn URL gültig ist und False, wenn URL ungültig ist .

142
dd619
URLUtil.isValidUrl(url) 

Wenn dies nicht funktioniert, können Sie Folgendes verwenden: 

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

Wickeln Sie die Operation in einen Try/Catch ein. Es gibt viele Möglichkeiten, wie eine URL formuliert, aber nicht abgerufen werden kann. Tests wie das Überprüfen, ob der Hostname vorhanden ist, können außerdem keine Gewähr dafür bieten, dass der Host unmittelbar nach der Überprüfung nicht mehr erreichbar ist. Grundsätzlich kann durch keine Vorabprüfung sichergestellt werden, dass der Abruf nicht fehlschlägt und eine Ausnahme auslöst, sodass Sie die Ausnahmen besser behandeln möchten.

5
Andrew Medico

Ich habe viele Methoden ausprobiert. Und ich finde, dass niemand mit dieser URL funktioniert:

Jetzt benutze ich folgendes und alles geht gut.

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

Ich würde eine Kombination der hier und in anderen Stackoverflow-Threads genannten Methoden verwenden:

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

Sie können die URL folgendermaßen überprüfen:

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

In meinem Fall funktioniert Patterns.WEB_URL.matcher(url).matches() nicht richtig, wenn ich String ähnlich "first.secondword" eingebe (Meine App überprüft die Benutzereingabe). Diese Methode gibt true zurück.

URLUtil.isValidUrl(url) arbeitet für mich richtig. Vielleicht wäre es für jemanden nützlich

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

Wenn Sie kotlin verwenden, können Sie einen String.kt erstellen und folgenden Code schreiben:

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

Dann:

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

Dies ist die richtige Lösung, die ich verwende. Das Hinzufügen von https:// vor dem Originaltext verhindert, dass Text wie "www.cats.com" als URL betrachtet wird. Wenn new URL() erfolgreich ist, überprüfen Sie einfach das Muster, um einfache Texte wie " https: // cats " als URL auszuschließen.

0
Chirila Vasile