एंड्रॉइड में URL वैध है या नहीं, इसकी जांच कैसे करें


92

क्या "होस्ट को हल नहीं किया गया" त्रुटि से बचने का एक अच्छा तरीका है जो एक ऐप को क्रैश करता है? एक तरह से होस्ट से कनेक्ट करने का प्रयास करें (URL की तरह) और देखें कि क्या यह वैध है?


आप मेजबान से कैसे जुड़ रहे हैं?
स्टीलबाइट्स

जवाबों:


193

नीचे दिए गए URL को मान्य करने के लिए URLUtil का उपयोग करें ।

 URLUtil.isValidUrl(url)

यदि URL वैध है और URL अमान्य है तो यह सही लौटेगा ।


isValidUrl निम्न URL के लिए गलत है, हालांकि डिवाइस इसके साथ काफी खुश लगता है (यह फ़ाइल के बाद डबल स्लैश याद कर रहा है :)। "फ़ाइल: /storage/emulated/0/Android/data/com.samsung.android.app.pinboard/files/ClipData/Screenshot_NormarAppImage.png"
टॉम मेम्सेरे

7
मैं इस पद्धति पर निर्भर नहीं होता, क्योंकि यह गहन सत्यापन नहीं करता है, केवल सबसे सरल वेब व्यू केस। स्रोत
marwinXXII

14
बेहतर उत्तर: stackoverflow.com/questions/5617749/…
marwinXXII

1
ऐसा लगता है कि जब तक यह है http://या https://यह वापस आ जाएगा
hehe

क्या इससे मेल्टो जैसे यूआरएल से बचने में मदद मिलेगी: abc@xyz.com और इसके बारे में: रिक्त # अवरुद्ध
रामप्रसाद बिस्मिल

69
URLUtil.isValidUrl(url);

यदि यह काम नहीं करता है तो आप इसका उपयोग कर सकते हैं:

Patterns.WEB_URL.matcher(url).matches();

क्या यह केवल पैटर्न की जांच नहीं करता है, बजाय इसके कि URL वास्तव में सक्रिय है?
डेक्कन मैककेना

1
जहाँ तक मुझे पता है, अगर हमें यह जाँचने की आवश्यकता है कि क्या url वास्तव में पिंग है या नहीं, तो हमें HttpURLConnection वर्ग का उपयोग करके मैन्युअल रूप से जांच करनी चाहिए।
प्रणव

यदि आपको स्कीमा के बिना यूआरएल की जांच करने की आवश्यकता है तो दूसरे विकल्प का उपयोग करें। यदि स्कीमा नहीं जोड़ी गई है तो URLUtil.isValidUrl झूठी वापस आ जाएगी।
user3783123

Url कैसे चेक करें https:////testtovation.com
मणिकंदन के जूल

18

मैं यहाँ और अन्य 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;
}

5

एक कोशिश / पकड़ में ऑपरेशन लपेटें। ऐसे कई तरीके हैं जो एक URL को अच्छी तरह से बनाया जा सकता है लेकिन पुनर्प्राप्ति योग्य नहीं है। इसके अलावा, यह देखने जैसे परीक्षण कि क्या होस्टनाम मौजूद है, कुछ भी गारंटी नहीं देता है क्योंकि चेक के बाद होस्ट अप्राप्य हो सकता है। मूल रूप से, पूर्व-चेकिंग की कोई भी राशि इस बात की गारंटी नहीं दे सकती है कि पुनर्प्राप्ति विफल नहीं होगी और एक अपवाद नहीं फेंकेगी, इसलिए आप अपवादों को संभालने के लिए बेहतर योजना बनाते हैं।


मुझे अपवाद को संभालने में कोई आपत्ति नहीं है लेकिन मैं उस अपवाद के कारण ऐप को क्रैश होने से कैसे रोक सकता हूं?
बच्चाले

4
@kidalex अरे, पकड़ अपवाद? 'अपवाद को संभालने' का और क्या मतलब हो सकता है?
लोर्न

4

मैंने बहुत सारे तरीके आजमाए हैं। और पाया कि कोई भी इस 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;
}

4
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;
            }

4

मेरे मामले Patterns.WEB_URL.matcher(url).matches()में सही ढंग से काम नहीं करता है जब मैं String"first.secondword" के समान टाइप करता हूं (मेरा ऐप उपयोगकर्ता इनपुट की जांच करता है)। यह तरीका सही है।

URLUtil.isValidUrl(url)मेरे लिए सही ढंग से काम करता है। शायद यह किसी और के लिए उपयोगी होगा


4

यदि आप उपयोग कर रहे हैं तो आप kotlinएक 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
}


2
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


2

बस इस कोड को जोड़ें:

Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();       

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.