有没有一种好的方法来避免导致应用崩溃的“主机未解析”错误?尝试连接到主机(例如URL)并查看其是否有效的某种方式?
Answers:
使用 URLUtil 验证URL,如下所示。
URLUtil.isValidUrl(url)
如果URL有效,则返回True;如果URL无效,则返回false。
http://
或https://
它将返回true
URLUtil.isValidUrl(url);
如果这不起作用,则可以使用:
Patterns.WEB_URL.matcher(url).matches();
我将在这里和其他Stackoverflow线程中使用上述方法的组合:
private boolean isValid(String urlString) {
try {
URL url = new URL(urlString);
return URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
} catch (MalformedURLException e) {
}
return false;
}
我尝试了很多方法,发现没有人能很好地使用此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
。