2012-10-04 12 views
6

To jest absolutnie dziwne, ale nie mogę znaleźć żadnego analizatora składni Java/Android, który będzie zgodny, aby zwrócić pełną listę parametrów.Pobierz kolekcję nazw parametrów z adresu URL Java/Android

Znalazłem java.net.URL i android.net.Uri, ale nie można zwrócić kolekcji parametrów.

Chcę przekazać ciąg znaków, np.

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 

Czy ktoś wie, gotowe rozwiązanie?

+1

można udostępnić swój kod ... –

Odpowiedz

12

Istnieje sposób, aby uzyskać kolekcję wszystkich nazw parametrów.

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

Otrzymuję błąd kompilacji czas: metoda parse (HttpEntity) w typie URLEncodedUtils nie ma zastosowania do argumentów (URI). – Gem

+0

NameValuePair jest amortyzowany, a co używamy? –

4

Ta metoda statyczna buduje mapę parametrów z danego adresu 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()); 
    }}; 
} 

Wykorzystanie

extractParamsFromURL(url).get("key")

0

UrlQuerySanitizer dodany w poziomie 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

WIL urllib biblioteki l analizować parametry ciągu zapytania i umożliwiać dostęp do parametrów jako listy lub mapy. Użyj tej listy, jeśli mogą występować zduplikowane klucze, w przeciwnym razie mapa jest bardzo przydatna.

Biorąc pod uwagę ten fragment:

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

Wyjście jest:

{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 
Powiązane problemy