Adakah cara yang baik untuk menghindari kesalahan "host tidak terselesaikan" yang membuat aplikasi mogok? Semacam cara untuk mencoba menghubungkan ke host (seperti URL) dan melihat apakah itu valid?
Adakah cara yang baik untuk menghindari kesalahan "host tidak terselesaikan" yang membuat aplikasi mogok? Semacam cara untuk mencoba menghubungkan ke host (seperti URL) dan melihat apakah itu valid?
Jawaban:
Gunakan URLUtil untuk memvalidasi URL seperti di bawah ini.
URLUtil.isValidUrl(url)
Ini akan mengembalikan True jika URL valid dan false jika URL tidak valid .
http://
atau https://
akan kembali benar
URLUtil.isValidUrl(url);
Jika ini tidak berhasil, Anda dapat menggunakan:
Patterns.WEB_URL.matcher(url).matches();
Saya akan menggunakan kombinasi metode yang disebutkan di sini dan di utas Stackoverflow lainnya:
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;
}
Selesaikan operasi dengan mencoba / menangkap. Ada banyak cara agar URL dapat dibentuk dengan baik tetapi tidak dapat diambil kembali. Selain itu, pengujian seperti melihat apakah nama host ada tidak menjamin apa pun karena host mungkin menjadi tidak dapat dijangkau setelah pemeriksaan. Pada dasarnya, tidak ada pengecekan awal yang dapat menjamin bahwa pengambilan tidak akan gagal dan mengeluarkan pengecualian, jadi Anda lebih baik berencana untuk menangani pengecualian.
Saya telah mencoba banyak metode. Dan ternyata tidak ada yang berfungsi dengan baik dengan URL ini:
Sekarang saya menggunakan yang berikut dan semuanya berjalan dengan baik.
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;
}
Dalam kasus saya Patterns.WEB_URL.matcher(url).matches()
tidak berfungsi dengan benar dalam kasus ketika saya mengetikString
mirip dengan "first.secondword" (aplikasi saya memeriksa input pengguna). Metode ini mengembalikan nilai true.
URLUtil.isValidUrl(url)
bekerja dengan benar untuk saya. Mungkin akan berguna bagi orang lain
Anda dapat memvalidasi URL dengan mengikuti:
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;
}
}
Ini solusi yang benar yang saya gunakan. Menambahkan https://
sebelum teks asli mencegah teks seperti "www.cats.com" dianggap sebagai URL
. Jika new URL()
berhasil, maka jika Anda hanya memeriksa pola untuk mengecualikan teks sederhana seperti " https: // kucing " untuk dipertimbangkan URL
.