アプリをクラッシュさせる「ホストが解決されていません」エラーを回避する良い方法はありますか?ホストへの接続(URLなど)を試して、それが有効かどうかを確認する方法はありますか?
RLUtilを使用して、以下のようにURLを検証します。
URLUtil.isValidUrl(url)
RLが有効な場合はtrueおよびRLが無効な場合はfalseを返します。
URLUtil.isValidUrl(url);
これが機能しない場合は、次を使用できます。
Patterns.WEB_URL.matcher(url).matches();
ここと他の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;
}
操作を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;
}
次の方法でURLを検証できます。
Patterns.WEB_URL.matcher(potentialUrl).matches()
私の場合、「first.secondword」と同じようにString
と入力すると、Patterns.WEB_URL.matcher(url).matches()
は正しく機能しません(私のアプリはユーザー入力をチェックします)。このメソッドはtrueを返します。
URLUtil.isValidUrl(url)
は正常に機能します。たぶんそれは他の誰かに役立つでしょう
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;
}
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
}
new Java.net.URL(String) throws MalformedURLException
_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
と見なすように除外した場合。