Tworzę aplikację na Androida. Muszę zbudować identyfikator URI dla mojej aplikacji, aby wykonać żądanie interfejsu API. O ile nie ma innego sposobu na umieszczenie zmiennej w URI, jest to najłatwiejszy sposób, jaki znalazłem. Odkryłem, że musisz użyć Uri.Builder
, ale nie jestem pewien, jak to zrobić. Mój adres URL to:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Mój schemat to http, autorytet lapi.transitchicago.com
, ścieżka to /api/1.0
, segmenty ścieżki to ttarrivals.aspx
, a ciąg zapytania to key=[redacted]&mapid=value
.
Mój kod jest poniżej:
Intent intent = getIntent();
String value = intent.getExtras().getString("value");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
.authority("www.lapi.transitchicago.com")
.appendPath("api")
.appendPath("1.0")
.appendPath("ttarrivals.aspx")
.appendQueryParameter("key", "[redacted]")
.appendQueryParameter("mapid", value);
Rozumiem, że mogę to zrobić URI.add
, ale jak mogę to zintegrować z Uri.Builder
? Dodam wszystko podobnego URI.add(scheme)
, URI.add(authority)
i tak dalej? A może nie tak to zrobić? Czy istnieje też inny łatwiejszy sposób dodania zmiennej do identyfikatora URI / adresu URL?
źródło
appendPath()
metoda. Jeśli jest to ciąg zapytania (występujący po?), UżyjappendQueryParameter()
. Spójrz na adres URL, który mam w przykładzie i co robię z każdym segmentem. Dodałem równieżtoString()
dobuild()
połączenia, aby odzyskać odpowiedni typ.Jest inny sposób korzystania
Uri
i możemy osiągnąć ten sam celAby zbudować Uri, możesz użyć tego:
Możesz to wszystko zadeklarować w powyższy sposób, a nawet wewnątrz
Uri.parse()
iappendQueryParameter()
W końcu
źródło
Doskonała odpowiedź z góry zamieniła się w prostą metodę użyteczności.
źródło
oto dobry sposób na wyjaśnienie:
istnieją dwie formy identyfikatora URI
1 - Konstruktor (gotowy do modyfikacji , nie gotowy do użycia )
2 - Wbudowany ( nie gotowe do modyfikowany , gotowe mają być używane )
Możesz utworzyć konstruktora przez
zwróci to Konstruktora gotowego do modyfikacji w następujący sposób: -
ale aby go użyć, musisz go najpierw zbudować
lub jakkolwiek go użyjesz. a następnie został zbudowany , że jest już zbudowany dla Ciebie, gotowy do użycia, ale nie mogą być modyfikowane.
jest gotowy do użycia, ale jeśli chcesz go zmodyfikować, musisz buildUpon ()
teraz za każdym razem, gdy chcesz go zmodyfikować, musisz buildUpon () i na końcu build () .
więc Uri.Builder jest typem Konstruktora, który przechowuje w nim Konstruktora. Uri to typ zbudowany, który przechowuje w nim już zbudowany identyfikator URI.
new Uri.Builder (); przywraca Konstruktora . Uri.parse („Twój URI idzie tutaj”) zwraca wartość Built .
i budowy () można zmienić z Builder do Wbudowany . buildUpon () można zmienić go od Zbudowany do Builder . Oto, co możesz zrobić
i odwrotnie:
mam nadzieję, że moja odpowiedź pomogła :) <3
źródło
na przykład w
second
Answer
użyłem tej techniki dla tego samego adresu URLhttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
potem po ukończeniu budowy otrzymaj to w
URL
ten sposóbi otwórz połączenie
i jeśli
simple
na przykład link jest podobny do lokalizacji URIgeo:0,0?q=29203
źródło
URL url = new URL(builder.build().toString());
musi zostać owinięty blokiem catch dla MalformedURLExceptionUżycie
appendEncodePath()
może zaoszczędzić wiele linii niżappendPath()
, następujący fragment kodu tworzy ten adres URL:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
źródło
Najlepsza odpowiedź: https://stackoverflow.com/a/19168199/413127
Przykład dla
Teraz z Kotlinem
źródło
Możesz to zrobić za pomocą wyrażeń lambda;
i możesz tworzyć takie parametry;
Btw. Jeśli napotkasz jakikolwiek problem
“lambda expressions not supported at this language level”
, sprawdź ten adres URL;https://stackoverflow.com/a/22704620/2057154
źródło