2012-10-04 15 views
6

Điều này hoàn toàn lạ, nhưng tôi không thể tìm thấy bất kỳ trình phân tích cú pháp URL Java/Android nào sẽ tương thích để trả về danh sách đầy đủ các tham số.Nhận bộ sưu tập tên thông số từ Java/Android url

Tôi đã tìm thấy java.net.URL và android.net.Uri nhưng chúng không thể trả lại tập hợp tham số.

Tôi muốn chuyển chuỗi url, ví dụ:

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 

Có ai biết giải pháp sẵn sàng không?

+1

bạn có thể chia sẻ mã của bạn ... –

Trả lời

12

Có cách thu thập tất cả tên thông số.

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

Tôi nhận được biên dịch lỗi thời gian: Phương pháp phân tích cú pháp (HttpEntity) trong các loại URLEncodedUtils không áp dụng cho các đối số (URI). – Gem

+0

NameValuePair được khấu hao sau đó những gì chúng tôi sử dụng? –

4

phương pháp tĩnh này được xây dựng bản đồ các thông số từ URL đã cho

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

sử dụng

extractParamsFromURL(url).get("key")

0

UrlQuerySanitizer thêm vào mức 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

Các urllib thư viện wil l phân tích các tham số chuỗi truy vấn và cho phép bạn truy cập các tham số dưới dạng danh sách hoặc bản đồ. Sử dụng danh sách nếu có thể có các khóa trùng lặp, nếu không bản đồ là khá tiện dụng.

Với đoạn mã này:

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

Đầu ra là:

{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