অ্যান্ড্রয়েডে ইউআরএল বৈধ কিনা তা কীভাবে পরীক্ষা করবেন


92

"হোস্টটি সমাধান হয় না" ত্রুটি যা কোনও অ্যাপ্লিকেশনকে ক্র্যাশ করে তা এড়াতে কী কোনও ভাল উপায় আছে? কোনও হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করার একটি উপায় (URL এর মতো) এবং এটি এমনকি বৈধ কিনা তা দেখুন?


আপনি কিভাবে হোস্টের সাথে সংযোগ করছেন?
স্টিলবাইটস

উত্তর:


193

URL হিসাবে ইউটিএলকে নীচের মত যাচাই করতে ব্যবহার করুন ।

 URLUtil.isValidUrl(url)

URL টি বৈধ এবং মিথ্যা যদি URL অবৈধ হয় তবে এটি সত্য হবে ।


isvalidUrl নিম্নলিখিত URL টির জন্য মিথ্যা প্রত্যাবর্তন করে, যদিও ডিভাইসটি এতে যথেষ্ট খুশি মনে হচ্ছে (এটি ফাইলের পরে ডাবল স্ল্যাশ অনুপস্থিত :)। "ফাইল: / স্টোরেজ / এমুলেটেড/0/Android/data/com.samsung.android.app.pinboard/files/ ক্লিপডাটা / স্ক্রিনশট_নির্মার অ্যাপ্লিকেশন.কম"
টম

7
আমি এই পদ্ধতির উপর নির্ভর করব না, কারণ এটি গভীর বৈধতা দেয় না, কেবলমাত্র সর্বাধিক সাধারণ ওয়েবভিউ ক্ষেত্রে। উত্স
মার্ভিনএক্সএক্সআইএসআই

14

4
মনে হয় যতক্ষণ না এটি রয়েছে http://বা https://এটি সত্য ফিরে আসবে
hehe

এটি কি
মেলটো

69
URLUtil.isValidUrl(url);

যদি এটি কাজ না করে তবে আপনি ব্যবহার করতে পারেন:

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

এটি কি ইউআরএলটি আসলে সক্রিয় কিনা তার চেয়ে কেবল প্যাটার্নটি পরীক্ষা করে না?
ডিক্লান ম্যাককেনা

4
আমি যতদূর জানি, ইউআরএলটি আসলে পিং করছে কিনা তা আমাদের যদি খতিয়ে দেখতে হয় তবে এইচটিটিপিআরএল সংযোগ বর্গটি ব্যবহার করে আমাদের ম্যানুয়ালি পরীক্ষা করা উচিত।
প্রণব

আপনার যদি স্কিমা ছাড়াই ইউআরএল পরীক্ষা করতে হয় তবে দ্বিতীয় বিকল্পটি ব্যবহার করুন। ইউআরএল.ইটি.আইভিএলআইডিআরএল মিথ্যা ফিরিয়ে দেবে যদি স্কিমা যোগ না করা হয়।
ব্যবহারকারী3783123

ইউআরএল কীভাবে চেক করবেন তা https:////testtovan.com
মানিকান্দন কে

18

আমি এখানে এবং অন্যান্য স্ট্যাকওভারফ্লো থ্রেডে উল্লিখিত পদ্ধতির সংমিশ্রণটি ব্যবহার করব:

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

আমি অনেকগুলি পদ্ধতি চেষ্টা করেছি nd এবং খুঁজে বের করুন যে এই ইউআরএলটি দিয়ে কেউই ভাল কাজ করে না :

এখন আমি নিম্নলিখিতটি ব্যবহার করি এবং সবকিছু ঠিকঠাক হয়।

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

এটি হ'ল সঠিক একাকীকরণ যা আমি ব্যবহার করছি। https://মূল পাঠ্যের পূর্বে যুক্ত করা "www.cats.com" এর মতো পাঠ্যকে বিবেচনা করা থেকে বাধা দেয় URL। যদি new URL()সফল হয়, তবে আপনি বিবেচনা করার জন্য " https: // বিড়াল " এর মতো সাধারণ পাঠ্যকে বাদ দেওয়ার জন্য যদি কেবল প্যাটার্নটি পরীক্ষা করেন URL


2

কোডের এই লাইনটি কেবল যুক্ত করুন:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.