Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Codificación de URL en Android

¿Cómo se codifica una URL en Android?

Pensé que era así:

  • ¿Cómo obtener el código ISO de país en las aplicaciones de Android?
  • JaCoCo no trabaja con pruebas Robolectric
  • Cómo obtener cobertura de código en Android usando Maven (android-maven-plugin)
  • final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8"); URL url = new URL(encodedURL); 

    Si hago lo anterior, el http:// en urlAsString es reemplazado por http%3A%2F%2F en encodedURL y luego obtengo una java.net.MalformedURLException cuando uso la URL.

  • Android cómo crear un esquema de URL personalizado con el formato dado myapp: // http: //
  • Al hacer clic en URL, se abre el navegador predeterminado
  • Org.json.JSONObject no se puede convertir en JSONArray en android
  • Cómo comprobar si la URL es válida en Android
  • ¿Cómo puedo pasar varios parámetros en la URL?
  • Abrir URL en WebView en lugar del explorador predeterminado
  • 6 Solutions collect form web for “Codificación de URL en Android”

    No codifica la URL completa, solo partes de ella que provienen de "fuentes no fiables".

     String query = URLEncoder.encode("apples oranges", "utf-8"); String url = "http://stackoverflow.com/search?q=" + query; 

    Alternativamente, puede usar Strings.urlEncode (String str) de DroidParts que no arroja excepciones verificadas.

    O utilizar algo como

     String uri = Uri.parse("http://...") .buildUpon() .appendQueryParameter("key", "val") .build().toString(); 

    Voy a añadir una sugerencia aquí. Usted puede hacer esto que evita tener que conseguir cualquier bibliotecas externas.

    Probar esto:

     String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4"; URL url = new URL(urlStr); URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); url = uri.toURL(); 

    Usted puede ver que en esta URL en particular, necesito tener esos espacios codificados para que yo pueda usarlo para una solicitud.

    Esto se aprovecha de un par de funciones disponibles en las clases de Android. En primer lugar, la clase de URL puede romper una url en sus componentes adecuados por lo que no hay necesidad de hacer cualquier trabajo de búsqueda / sustitución de cadenas. En segundo lugar, este enfoque aprovecha la característica de clase URI de los componentes que escapan correctamente cuando se construye un URI a través de componentes en lugar de una sola cadena.

    La belleza de este enfoque es que usted puede tomar cualquier cadena de url válida y que tenga que trabajar sin necesidad de ningún conocimiento especial de él mismo.

    Para android, utilizaría la cadena android.net.Uri.encode (String s)

    Codifica caracteres en la cadena dada como '%' – octetos con escape usando el esquema UTF-8. Deja letras intactas ("AZ", "az"), números ("0-9") y caracteres sin reservas ("_- !. Codifica todos los demás caracteres.

    Ex/

     String urlEncoded = "http://stackoverflow.com/search?q=" + Uri.encode(query); 

    También puedes usar esto

     private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS); 

    Es el método más simple

     try { query = URLEncoder.encode(query, "utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

    Puede utilizar los métodos siguientes

     public static String parseUrl(String surl) throws Exception { URL u = new URL(surl); return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString(); } 

    o

     public String parseURL(String url, Map<String, String> params) { Builder builder = Uri.parse(url).buildUpon(); for (String key : params.keySet()) { builder.appendQueryParameter(key, params.get(key)); } return builder.build().toString(); } 

    El segundo es mejor que el primero.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.