有没有一种好方法可以避免崩溃应用程序的“主机未解决”错误?某种方式尝试连接到主机(如URL)并查看它是否有效?
答案 0 :(得分:148)
使用 URLUtil 验证网址,如下所示。
URLUtil.isValidUrl(url)
如果网址有效>,则返回,如果网址无效,则返回 false。
答案 1 :(得分:49)
URLUtil.isValidUrl(url)
如果这不起作用,您可以使用:
Patterns.WEB_URL.matcher(url).matches()
答案 2 :(得分:5)
将操作包装在try / catch中。有许多方法可以使URL格式良好但不可检索。此外,检查主机名是否存在等测试不能保证任何内容,因为主机可能在检查后无法访问。基本上,没有任何预检查可以保证检索不会失败并抛出异常,因此您最好计划处理异常。
答案 3 :(得分:5)
我会使用此处提到的方法和其他Stackoverflow线程的组合:
{{1}}
答案 4 :(得分:4)
我尝试过很多方法。发现this 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;
}
答案 5 :(得分:3)
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;
}
答案 6 :(得分:3)
在我的情况下Patterns.WEB_URL.matcher(url).matches()
在键入String
类似于" first.secondword"(我的应用检查用户输入)的情况下无法正常工作。此方法返回true。
URLUtil.isValidUrl(url)
对我有效。也许这会对其他人有用
答案 7 :(得分:3)
您可以通过以下方式验证URL:
Patterns.WEB_URL.matcher(potentialUrl).matches()
答案 8 :(得分:2)
只需添加以下代码行:
Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
答案 9 :(得分:1)
如果您从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
}
答案 10 :(得分:0)
new java.net.URL(String) throws MalformedURLException
答案 11 :(得分:0)
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()
成功,那么如果您仅检查模式以排除像“ URL
”之类的简单文本,就将其视为$("iframeId").contents().find("img.ms-dlgCloseBtnImg").attr("src","New Image URL");
。