アプリをクラッシュさせる「ホストが解決されていません」というエラーを回避する良い方法はありますか?ホスト(URLなど)に接続して、それが有効かどうかを確認するための何らかの方法はありますか?
回答:
URLUtil を使用して 、以下のようにURLを検証します。
 URLUtil.isValidUrl(url)
これは、返されたURLが有効である場合はTrueとURLが無効の場合はfalse。
http://か、https://それが真に戻る限り、それはそうです
                    URLUtil.isValidUrl(url);
これが機能しない場合は、次を使用できます。
Patterns.WEB_URL.matcher(url).matches();
操作をtry / catchでラップします。URLを整形式にする方法はたくさんありますが、取得することはできません。さらに、ホスト名が存在するかどうかを確認するなどのテストでは、チェックの直後にホストに到達できなくなる可能性があるため、何も保証されません。基本的に、事前チェックを行っても、取得が失敗して例外がスローされないことを保証できるわけではないため、例外の処理を計画することをお勧めします。
私は多くの方法を試しましたが、この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;
}
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;
            }
次の方法でURLを検証できます。
Patterns.WEB_URL.matcher(potentialUrl).matches()
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ます。