"হোস্টটি সমাধান হয় না" ত্রুটি যা কোনও অ্যাপ্লিকেশনকে ক্র্যাশ করে তা এড়াতে কী কোনও ভাল উপায় আছে? কোনও হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করার একটি উপায় (URL এর মতো) এবং এটি এমনকি বৈধ কিনা তা দেখুন?
উত্তর:
URL হিসাবে ইউটিএলকে নীচের মত যাচাই করতে ব্যবহার করুন ।
URLUtil.isValidUrl(url)
URL টি বৈধ এবং মিথ্যা যদি URL অবৈধ হয় তবে এটি সত্য হবে ।
http://
বা https://
এটি সত্য ফিরে আসবে
URLUtil.isValidUrl(url);
যদি এটি কাজ না করে তবে আপনি ব্যবহার করতে পারেন:
Patterns.WEB_URL.matcher(url).matches();
আমি এখানে এবং অন্যান্য স্ট্যাকওভারফ্লো থ্রেডে উল্লিখিত পদ্ধতির সংমিশ্রণটি ব্যবহার করব:
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 টি সুগঠিত হতে পারে তবে পুনরুদ্ধারযোগ্য নয়। এছাড়াও, হোস্টনামটি উপস্থিত রয়েছে কিনা তা দেখার মতো পরীক্ষাগুলি কোনও কিছুর গ্যারান্টি দেয় না কারণ হোস্টটি চেকের ঠিক পরে পৌঁছানো যায় না। মূলত, প্রাক-চেকিংয়ের কোনও পরিমাণই গ্যারান্টি দিতে পারে না যে পুনরুদ্ধার ব্যর্থ হবে না এবং একটি ব্যতিক্রম ছুঁড়ে ফেলবে, সুতরাং ব্যতিক্রমগুলি পরিচালনা করার জন্য আপনি আরও ভাল পরিকল্পনা করেছেন।
আমি অনেকগুলি পদ্ধতি চেষ্টা করেছি 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;
}
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)
আমার জন্য সঠিকভাবে কাজ করে। হতে পারে এটি অন্য কারও কাজে লাগবে
আপনি নিম্নলিখিতটি অনুসরণ করে ইউআরএলকে বৈধতা দিন:
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;
}
}
এটি হ'ল সঠিক একাকীকরণ যা আমি ব্যবহার করছি। https://
মূল পাঠ্যের পূর্বে যুক্ত করা "www.cats.com" এর মতো পাঠ্যকে বিবেচনা করা থেকে বাধা দেয় URL
। যদি new URL()
সফল হয়, তবে আপনি বিবেচনা করার জন্য " https: // বিড়াল " এর মতো সাধারণ পাঠ্যকে বাদ দেওয়ার জন্য যদি কেবল প্যাটার্নটি পরীক্ষা করেন URL
।