क्या "होस्ट को हल नहीं किया गया" त्रुटि से बचने का एक अच्छा तरीका है जो एक ऐप को क्रैश करता है? एक तरह से होस्ट से कनेक्ट करने का प्रयास करें (URL की तरह) और देखें कि क्या यह वैध है?
जवाबों:
नीचे दिए गए URL को मान्य करने के लिए URLUtil का उपयोग करें ।
URLUtil.isValidUrl(url)
यदि URL वैध है और URL अमान्य है तो यह सही लौटेगा ।
http://
या https://
यह वापस आ जाएगा
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;
}
एक कोशिश / पकड़ में ऑपरेशन लपेटें। ऐसे कई तरीके हैं जो एक 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;
}
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;
}
मेरे मामले Patterns.WEB_URL.matcher(url).matches()
में सही ढंग से काम नहीं करता है जब मैं String
"first.secondword" के समान टाइप करता हूं (मेरा ऐप उपयोगकर्ता इनपुट की जांच करता है)। यह तरीका सही है।
URLUtil.isValidUrl(url)
मेरे लिए सही ढंग से काम करता है। शायद यह किसी और के लिए उपयोगी होगा
आप 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;
}
}
यह सही sollution है जो मैं उपयोग कर रहा हूँ। https://
मूल पाठ से पहले जोड़ने से "www.cats.com" जैसे पाठ को माना जाता है URL
। यदि new URL()
सफल हो, तो यदि आप केवल " https: // बिल्लियों " जैसे सरल ग्रंथों को बाहर करने के लिए पैटर्न की जांच करते हैं तो विचार किया जाना चाहिए URL
।