Cómo comprobar si la URL es válida en Android

¿Hay una buena manera de evitar que el "host no está resuelto" error que bloquea una aplicación? ¿Una cierta clase de una manera de intentar conectar con un anfitrión (como una URL) y ver si es incluso válido?

6 Solutions collect form web for “Cómo comprobar si la URL es válida en Android”

Use URLUtil para validar la URL como se muestra a continuación.

URLUtil.isValidUrl(url) 

Devolverá True si la URL es válida y false si la URL no es válida .

 URLUtil.isValidUrl(url) 

Si esto no funciona, puede utilizar:

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

camino fácil

Utilizar el patrón WEB_URL en la clase Patterns

  Patterns.WEB_URL.matcher(potentialUrl).matches() 

Devolverá True si la URL es válida y false si la URL no es válida .

Respuesta larga

A partir de la API de Android nivel 8 hay un patrón WEB_URL . Citando la fuente, que "coinciden [es] la mayor parte de RFC 3987". Si apunta a un nivel inferior de API, simplemente puede copiar el patrón del origen e incluirlo en su aplicación. Supongo que sabes cómo usar patrones y matchers, así que no voy a entrar en más detalles aquí.

También la clase URLUtil proporciona algunos métodos útiles, por ejemplo:

  • IsHttpUrl ()
  • IsValidUrl ()

Las descripciones de los métodos no son muy elaboradas, por lo que probablemente es mejor mirar la fuente y averiguar cuál se ajusta mejor a su propósito.

En cuanto a cuándo desencadenar la comprobación de validación, hay múltiples posibilidades: puede utilizar las funciones de devolución de llamada de EditText

  • OnFocusChanged () , o
  • OnTextChanged ()

O utilizar un TextWatcher , que creo que sería mejor.

NO USE URLUtil para validar la URL como se muestra a continuación.

  URLUtil.isValidUrl(url) 

Porque da cadenas como "http: //" como URL válida que no es verdadera

Envuelva la operación en un try / catch. Hay muchas maneras en que una URL puede estar bien formada pero no recuperable. Además, pruebas como ver si el nombre de host existe no garantiza nada porque el host puede llegar a ser inaccesible justo después de la comprobación. Básicamente, ninguna cantidad de pre-comprobación puede garantizar que la recuperación no fallará y lanzará una excepción, por lo que es mejor planear manejar las excepciones.

He intentado muchos métodos. Y encuentro que nadie trabaja muy bien con esta URL:

Ahora uso lo siguiente y todo va bien.

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

Utilizaría una combinación de métodos mencionados aquí y en otros subprocesos de Stackoverflow:

 private boolean isValid(String urlString) { try { URL url = new URL(urlString); return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches(); } catch (MalformedURLException e) { } return false; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.