Je développe une application Android. J'ai besoin de créer un URI pour mon application pour faire une demande d'API. À moins qu'il n'y ait une autre façon de mettre une variable dans un URI, c'est la manière la plus simple que j'ai trouvée. J'ai trouvé que vous devez utiliser Uri.Builder
, mais je ne sais pas trop comment. Mon URL est:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Mon schéma est http, l'autorité est lapi.transitchicago.com
, le chemin est /api/1.0
, le ou les segments de chemin sont ttarrivals.aspx
et la chaîne de requête est key=[redacted]&mapid=value
.
Mon code est ci-dessous:
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);
Je comprends que je peux le faire URI.add
, mais comment l'intégrer dans le Uri.Builder
? Dois-je tout ajouter URI.add(scheme)
, URI.add(authority)
etc.? Ou n'est-ce pas la façon de procéder? De plus, existe-t-il un autre moyen plus simple d'ajouter une variable à un URI / URL?
la source
appendPath()
pour la méthode. S'il s'agit d'une chaîne de requête (après le?), UtilisezappendQueryParameter()
. Jetez un œil à l'URL que j'ai dans l'exemple et à ce que je fais avec chaque segment. J'ai également ajoutétoString()
à l'build()
appel pour récupérer le type approprié.Il y a une autre façon d'utiliser
Uri
et nous pouvons atteindre le même objectifPour construire l'Uri, vous pouvez utiliser ceci:
Vous pouvez déclarer tout cela de la manière ci-dessus ou même à l'intérieur du
Uri.parse()
etappendQueryParameter()
Enfin
la source
Excellente réponse d'en haut transformée en une simple méthode d'utilité.
la source
voici un bon moyen de l'expliquer:
il existe deux formes d'URI
1 - Builder (prêt à être modifié , pas prêt à être utilisé )
2 - Construit ( pas prêt à être modifié , prêt à être utilisé )
Vous pouvez créer un constructeur en
ça va retourner un Builder prêt à être modifié comme ceci: -
mais pour l'utiliser, vous devez d'abord le construire
ou comme tu vas l'utiliser. et puis vous avez construit qui est déjà construit pour vous, prêt à l'emploi mais ne peut pas être modifié.
ceci est prêt à l'emploi mais si vous voulez le modifier, vous devez buildUpon ()
maintenant, chaque fois que vous voulez le modifier, vous devez buildUpon () et à la fin build () .
si Uri.Builder est un constructeur de type qui stockent un constructeur en elle. Uri est un type Built qui y stocke un URI déjà construit.
nouveau Uri.Builder (); renvoie un constructeur . Uri.parse ("votre URI va ici") renvoie un Built .
et avec build (), vous pouvez le faire passer de Builder à Built . buildUpon (), vous pouvez le faire passer de Built à Builder . Voici ce que vous pouvez faire
et aussi le contraire: -
j'espère que ma réponse a aidé :) <3
la source
pour l'exemple dans le
second
Answer
j'ai utilisé cette technique pour la même URLhttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
puis après avoir terminé la construction, obtenez-le
URL
comme ceciet ouvrir une connexion
et si le lien est
simple
comme l'emplacement uri, par exemplegeo:0,0?q=29203
la source
URL url = new URL(builder.build().toString());
doit être enveloppé par un bloc try catch pour MalformedURLExceptionL'utilisation
appendEncodePath()
pourrait vous faire économiser plusieurs lignesappendPath()
, l'extrait de code suivant crée cette URL:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
la source
Meilleure réponse: https://stackoverflow.com/a/19168199/413127
Exemple pour
Maintenant avec Kotlin
la source
Vous pouvez le faire avec des expressions lambda;
et vous pouvez créer des paramètres comme ça;
Btw. Si vous rencontrez un problème comme celui-ci
“lambda expressions not supported at this language level”
, veuillez vérifier cette URL;https://stackoverflow.com/a/22704620/2057154
la source