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?
android
url
url-validation
kidalex.dll
sumber
sumber
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 .
sumber
http://
atauhttps://
akan kembali benarURLUtil.isValidUrl(url);
Jika ini tidak berhasil, Anda dapat menggunakan:
Patterns.WEB_URL.matcher(url).matches();
sumber
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; }
sumber
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.
sumber
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; }
sumber
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; }
sumber
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 lainsumber
Jika Anda menggunakan from
kotlin
Anda dapat membuatString.kt
dan menulis kode di bawah ini:fun String.isValidUrl(): Boolean = Patterns.WEB_URL.matcher(this).matches()
Kemudian:
String url = "www.yourUrl.com" if (!url.isValidUrl()) { //some code }else{ //some code }
sumber
Anda dapat memvalidasi URL dengan mengikuti:
Patterns.WEB_URL.matcher(potentialUrl).matches()
sumber
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 sebagaiURL
. Jikanew URL()
berhasil, maka jika Anda hanya memeriksa pola untuk mengecualikan teks sederhana seperti " https: // kucing " untuk dipertimbangkanURL
.sumber
Tambahkan saja baris kode ini:
Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
sumber
new java.net.URL(String) throws MalformedURLException
sumber