Ich entwickle eine Android App. Ich muss einen URI für meine App erstellen, um eine API-Anfrage zu stellen. Dies ist der einfachste Weg, den ich gefunden habe, es sei denn, es gibt eine andere Möglichkeit, eine Variable in eine URI einzufügen. Ich habe festgestellt, dass Sie verwenden müssen Uri.Builder
, aber ich bin nicht ganz sicher, wie. Meine URL lautet:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Mein Schema ist http, Autorität ist lapi.transitchicago.com
, Pfad ist /api/1.0
, Pfadsegment (e) ist ttarrivals.aspx
und Abfragezeichenfolge ist key=[redacted]&mapid=value
.
Mein Code ist unten:
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);
Ich verstehe, dass ich es kann URI.add
, aber wie integriere ich es in die Uri.Builder
? Soll ich alles wie hinzufügen URI.add(scheme)
, URI.add(authority)
und so weiter? Oder ist das nicht der richtige Weg? Gibt es auch eine andere einfachere Möglichkeit, einer URI / URL eine Variable hinzuzufügen?
quelle
appendPath()
für die Methode. Wenn es sich um eine Abfragezeichenfolge handelt (nach dem?), Verwenden SieappendQueryParameter()
. Schauen Sie sich die URL an, die ich im Beispiel habe, und was ich mit jedem Segment mache. IchtoString()
habe dembuild()
Anruf auch hinzugefügt , um den richtigen Typ zurückzubekommen.Es gibt eine andere Art der Verwendung
Uri
und wir können das gleiche Ziel erreichenUm den Uri zu bauen, können Sie Folgendes verwenden:
Sie können dies alles auf die oben beschriebene Weise oder sogar innerhalb des
Uri.parse()
und deklarierenappendQueryParameter()
Zu guter Letzt
quelle
Die hervorragende Antwort von oben wurde zu einer einfachen Dienstprogrammmethode.
quelle
Hier ist ein guter Weg, um es zu erklären:
Es gibt zwei Formen der URI
1 - Builder (bereit zur Änderung , nicht zur Verwendung bereit )
2 - Gebaut ( nicht bereit, geändert zu werden , bereit, verwendet zu werden )
Sie können einen Builder erstellen mit
Dies wird einen Builder zurückgeben, der bereit ist, wie folgt geändert zu werden: -
Aber um es zu benutzen, muss man es zuerst bauen
oder wie auch immer du es benutzen wirst. und dann haben Sie erstellt, das bereits für Sie erstellt wurde, einsatzbereit ist, aber nicht geändert werden kann.
Dies ist gebrauchsfertig, aber wenn Sie es ändern möchten, müssen Sie buildUpon ()
Jetzt müssen Sie jedes Mal, wenn Sie es ändern möchten, buildUpon () und am Ende build () .
so Uri.Builder ist ein Builder - Typ , die in ihm einen Builder speichern. Uri ist ein Gebautes Typ, in dem eine bereits erstellte URI gespeichert ist.
neuer Uri.Builder (); gibt einen Builder zurück . Uri.parse ("Ihr URI geht hierher") gibt einen Built zurück .
und mit build () können Sie es von Builder in Built ändern . buildUpon () können Sie von Built in Builder ändern . Hier ist was Sie tun können
und auch das Gegenteil: -
hoffe meine antwort hat geholfen :) <3
quelle
Für das Beispiel im habe
second
Answer
ich diese Technik für dieselbe URL verwendethttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
dann nach dem Fertiggebäude bekommen sie es als
URL
wie dieseund öffnen Sie eine Verbindung
und wenn link
simple
wie location uri ist, zum Beispielgeo:0,0?q=29203
quelle
URL url = new URL(builder.build().toString());
muss von einem Try Catch Block für MalformedURLExceptionWenn Sie
appendEncodePath()
verwenden, können Sie mehrere Zeilen sparen, alsappendPath()
das folgende Codefragment diese URL erstellt:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
quelle
Beste Antwort: https://stackoverflow.com/a/19168199/413127
Beispiel für
Jetzt mit Kotlin
quelle
Sie können dies mit Lambda-Ausdrücken tun.
und Sie können solche Parameter erstellen;
Übrigens. Wenn Sie auf ein Problem wie
“lambda expressions not supported at this language level”
dieses stoßen, überprüfen Sie bitte diese URL;https://stackoverflow.com/a/22704620/2057154
quelle