2012-10-04 37 views
6

Es absolutamente extraño, pero no puedo encontrar ningún analizador de URL Java/Android que sea compatible para devolver la lista completa de parámetros.Obtener colección de nombres de parámetros desde la url Java/Android

He encontrado java.net.URL y android.net.Uri pero no pueden devolver la recopilación de parámetros.

Quiero pasar una cadena de URL, p.

String url = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201"; 

SomeBestUrlParser parser = new SomeBestUrlParser(url); 
String[] parameters = parser.getParameterNames(); 
// should prints array with following elements 
// AWSAccessKeyId, Policy, Signature, key, Content-Type, acl, success_action_status 

¿Alguien sabe la solución preparada?

+1

puede compartir su código ... –

Respuesta

12

hay manera de conseguir la colección de todos los nombres de los parámetros.

String url = "http://domain.com/page?parameter1=value1&parameter2=value2"; 
List<NameValuePair> parameters = URLEncodedUtils.parse(new URI(url)); 
for (NameValuePair p : parameters) { 
    System.out.println(p.getName()); 
    System.out.println(p.getValue()); 
} 
+3

estoy consiguiendo error de compilación tiempo: El método de análisis sintáctico (HttpEntity) en el tipo URLEncodedUtils no es aplicable para los argumentos (URI). – Gem

+0

NameValuePair se deprecia entonces ¿qué usamos? –

4

Este método estático construye mapa de parámetros a partir de determinada URL

private Map<String, String> extractParamsFromURL(final String url) throws URISyntaxException { 
    return new HashMap<String, String>() {{ 
     for(NameValuePair p : URLEncodedUtils.parse(new URI(url), "UTF-8")) 
      put(p.getName(), p.getValue()); 
    }}; 
} 

uso

extractParamsFromURL(url).get("key")

0

UrlQuerySanitizer añadió en el nivel API 1

 UrlQuerySanitizer sanitizer = new UrlQuerySanitizer(url_string); 
     List<UrlQuerySanitizer.ParameterValuePair> list = sanitizer.getParameterList(); 
     for (UrlQuerySanitizer.ParameterValuePair pair : list) { 
      System.out.println(pair.mParameter); 
      System.out.println(pair.mValue); 
     } 
0

El Wil urllib biblioteca Analizo los parámetros de cadena de consulta y le permito acceder a los parámetros como una lista o un mapa. Use la lista si puede haber claves duplicadas; de lo contrario, el mapa es bastante útil.

Dado este fragmento:

String raw = "http://s3.amazonaws.com/?AWSAccessKeyId=123&Policy=456&Signature=789&key=asdasd&Content-Type=text/plain&acl=public-read&success_action_status=201"; 
Url url = Url.parse(raw); 
System.out.println(url.query().asMap()); 
for (KeyValue param : url.query().params()) { 
    System.out.println(param.key() + "=" + param.value()); 
} 

La salida es:

{Policy=456, success_action_status=201, Signature=789, AWSAccessKeyId=123, acl=public-read, key=asdasd, Content-Type=text/plain} 
AWSAccessKeyId=123 
Policy=456 
Signature=789 
key=asdasd 
Content-Type=text/plain 
acl=public-read 
success_action_status=201 
Cuestiones relacionadas