Bir uygulamayı çökerten "ana bilgisayar çözülmedi" hatasını önlemenin iyi bir yolu var mı? Bir ana bilgisayara (URL gibi) bağlanmanın ve hatta geçerli olup olmadığını görmenin bir yolu?
Yanıtlar:
URL'yi aşağıdaki gibi doğrulamak için URLUtil kullanın .
URLUtil.isValidUrl(url)
Bu dönecektir URL geçerli ise TRUE ve URL geçersizse yanlış .
http://
ya https://
doğru dönecektir
URLUtil.isValidUrl(url);
Bu işe yaramazsa şunları kullanabilirsiniz:
Patterns.WEB_URL.matcher(url).matches();
Burada ve diğer Stackoverflow iş parçacıklarında belirtilen yöntemlerin bir kombinasyonunu kullanırdım:
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;
}
İşlemi bir dene / yakala ile sar. Bir URL'nin iyi biçimlendirilmesinin ancak geri alınamamasının birçok yolu vardır. Ek olarak, ana bilgisayar adının var olup olmadığını görmek gibi testler hiçbir şey garanti etmez çünkü ana makineye kontrolden hemen sonra erişilemez hale gelebilir. Temel olarak, hiçbir ön kontrol, geri alma işleminin başarısız olmayacağını ve bir istisna oluşturmayacağını garanti edemez, bu nedenle istisnaları halletmeyi daha iyi planlamanız gerekir.
Birçok yöntem denedim ve bu URL ile kimsenin iyi çalışmadığını görüyorum :
Şimdi aşağıdakileri kullanıyorum ve her şey yolunda gidiyor.
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;
}
Aşağıdakileri yaparak URL'yi doğrulayabilirsiniz:
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;
}
}
Bu, kullandığım doğru çözüm. https://
Orijinal metnin önüne eklemek, "www.cats.com" gibi metinlerin kabul edilmesini engeller URL
. new URL()
Başarılı olursa , dikkate alınması gereken " https: // kediler " gibi basit metinleri hariç tutmak için kalıbı kontrol edin URL
.