web-dev-qa-db-ja.com

AndroidでURLが有効かどうかを確認する方法

アプリをクラッシュさせる「ホストが解決されていません」エラーを回避する良い方法はありますか?ホストへの接続(URLなど)を試して、それが有効かどうかを確認する方法はありますか?

68
kidalex

RLUtilを使用して、以下のようにURLを検証します。

 URLUtil.isValidUrl(url)

RLが有効な場合はtrueおよびRLが無効な場合はfalseを返します。

157
dd619
URLUtil.isValidUrl(url);

これが機能しない場合は、次を使用できます。

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

ここと他の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;
}
7
Ayaz Alifov

操作をtry/catchでラップします。 URLを整形式にすることはできますが、取得することはできません。さらに、ホスト名が存在するかどうかを確認するようなテストでは、チェック直後にホストに到達できなくなる可能性があるため、何も保証されません。基本的に、事前チェックの量は、取得が失敗して例外をスローしないことを保証できないため、例外を処理する方が適切です。

5
Andrew Medico

私は多くの方法を試しましたが、誰も この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;
}
4
androidyue

次の方法でURLを検証できます。

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

私の場合、「first.secondword」と同じようにStringと入力すると、Patterns.WEB_URL.matcher(url).matches()は正しく機能しません(私のアプリはユーザー入力をチェックします)。このメソッドはtrueを返します。

URLUtil.isValidUrl(url)は正常に機能します。たぶんそれは他の誰かに役立つでしょう

3
Jackky777
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

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
}
2
jo jo
new Java.net.URL(String) throws MalformedURLException
0
kreker
_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
Chirila Vasile