2013-09-06 9 views
18

Chcę zbudować następującą URI -Uri Builder w android - '/' zastępuje się wyrazami '% 2F' i ":" zastępuje się wyrazami "% 3A"

https://10.112.88.182:8443/Vehicle/services/socialService/login 

...

Builder builder = new Builder(); 
builder.scheme(Constants.URL_SCHEME); 
builder.authority(host); 
builder.appendPath(service + "/" +method); 
return builder.build().toString(); 

gdzie

  • URL_SCHEME - https
  • host - 10.112.88.182:8443/Vehicle/services/
  • service - socialService
  • method - login

Gdy ten kod jest uruchamiany uzyskać następujące URI -

https://10.112.88.182%3A8443%2FVehicle%2Fservices%2F/socialService%2Flogin 

/ zastępuje %2F i : zastępuje %3A

Odpowiedz

33

Tak działa Uri.Builder. Koduje niezabezpieczone znaki URL o specjalnym znaczeniu dla ich wartości heksadecymalnych %xx.

Aby zapobiec kodowania części URI, które są już poprawnie zakodowane, użyj encoded wersje funkcji producentów:

builder.encodedAuthority(host); 
builder.appendEncodedPath(service + "/" +method); 

Ale ponieważ wszystkie części adresu URL są już gotowe i nie potrzebują żadnych dodatkowych kodowanie, łatwiej aby użyć zwykłego StringBuilder do łączenia części.

+0

- jak będę mógł dodać ":" po moim IP (przed portem 8443)? – Manik

+0

Jeśli "host" jest ustawiony na "10.112.88.182: 8443", możesz zbudować ścieżkę, aby była to nazwa "Vehicle/services/socialService/login", która może być wykonana przez '.appendPath (Vehicle/services)) ', plus dodatkowe' .appendPath() 'lub' .appendEncodedPath() 'w razie potrzeby. – n8yn8

+0

Jak dodać coś z przecinkiem jako parametrem zapytania? 'appendQueryParameter (" zipcode "," 12346, US ")' zakodował ','. –

6

Jak laalto powiedział, to jak Uri.Builder działa, ale jeśli chcesz uzyskać URI w zwykłej postaci URL, jak w Twoim przypadku: https://10.112.88.182:8443/Vehicle/services/socialService/login można zrobić:

URL url = new URL(URLDecoder.decode(builder.build().toString(), "UTF-8")); 
+0

To jest świetne rozwiązanie. Ponieważ pierwotne żądanie próbuje zwrócić ciąg znaków, najlepszą odpowiedzią jest po prostu 'return URLDecoder.decode (builder.build(). ToString()," UTF-8 ");'. –

1

Rozwiązaniem jest całkiem proste, po prostu użyj appendEncodedPath(), nie zakoduje twojego łańcucha, tylko doda go tak, jak jest.

Powiązane problemy