2012-10-04 10 views
6

È assolutamente strano, ma non riesco a trovare alcun parser Java/Android URL che sia compatibile per restituire l'elenco completo dei parametri.Ottieni la raccolta dei nomi dei parametri dall'URL Java/Android

Ho trovato java.net.URL e android.net.Uri ma non sono in grado di restituire la raccolta dei parametri.

Voglio passare la stringa dell'URL, ad es.

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 

Qualcuno sa soluzione pronta?

+1

è possibile condividere il tuo codice ... –

risposta

12

Non c'è modo di ottenere la raccolta di tutti i nomi di parametro.

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

sto ottenendo compilazione errore di tempo: Il metodo parse (HttpEntity) nel tipo URLEncodedUtils non è applicabile per gli argomenti (URI). – Gem

+0

NomeValuePair è ammortizzato quindi cosa usiamo ?? –

4

Questo metodo statico costruisce la mappa di parametri da proposta 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()); 
    }}; 
} 

utilizzo

extractParamsFromURL(url).get("key")

0

UrlQuerySanitizer aggiunto API di livello 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

Wil urllib libreria Analizza i parametri della stringa di query e ti consente di accedere ai parametri come elenco o mappa. Usa l'elenco se potrebbero esserci chiavi duplicate, altrimenti la mappa è molto utile.

Dato questo frammento:

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

L'output è:

{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 
Problemi correlati