Is there a good way to avoid the \"host is not resolved\" error that crashes an app? Some sort of a way to try connecting to a host ( like a URL ) and see if it\'s even vali
In my case Patterns.WEB_URL.matcher(url).matches()
does not work correctly in the case when I type String
similar to "first.secondword"(My app checks user input). This method returns true.
URLUtil.isValidUrl(url)
works correctly for me. Maybe it would be useful to someone else
new java.net.URL(String) throws MalformedURLException
URLUtil.isValidUrl(url);
If this doesn't work you can use:
Patterns.WEB_URL.matcher(url).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;
}
}
This is the correct sollution that I'm using. Adding https://
before original text prevents text like "www.cats.com" to be considered as URL
. If new URL()
succeed, then if you just check the pattern to exclude simple texts like "https://cats" to be considered URL
.
I have tried a lot of methods.And find that no one works fine with this URL:
Now I use the following and everything goes well.
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;
}
If you are using from kotlin
you can create a String.kt
and write code bellow:
fun String.isValidUrl(): Boolean = Patterns.WEB_URL.matcher(this).matches()
Then:
String url = "www.yourUrl.com"
if (!url.isValidUrl()) {
//some code
}else{
//some code
}