是否有避免应用程序崩溃的“主机未解决”错误的好方法?某种尝试连接到主机(如 URL)并查看它是否有效的方法?
12 回答
使用 URLUtil 验证 URL,如下所示。
URLUtil.isValidUrl(url)
如果 URL 有效则返回True,如果 URL 无效则返回false。
URLUtil.isValidUrl(url);
如果这不起作用,您可以使用:
Patterns.WEB_URL.matcher(url).matches();
我将使用此处和其他 Stackoverflow 线程中提到的方法的组合:
public static boolean IsValidUrl(String urlString) {
try {
URL url = new URL(urlString);
return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches();
} catch (MalformedURLException ignored) {
}
return false;
}
如果您使用 fromkotlin
您可以创建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
}
将操作包装在 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;
}
在我输入类似于“first.secondword”(我的应用程序检查用户输入)的情况下,在我Patterns.WEB_URL.matcher(url).matches()
的情况下无法正常工作。String
此方法返回 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;
}
只需添加这行代码:
Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
您可以通过以下方式验证 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
. 如果成功,那么如果您只是检查模式以排除要考虑的“ https://catsnew URL()
”等简单文本。URL
new java.net.URL(String) throws MalformedURLException