Avec Retrofit 2, vous pouvez définir une URL complète dans l'annotation d'une méthode de service comme:
public interface APIService {
@GET("http://api.mysite.com/user/list")
Call<Users> getUsers();
}
Cependant, dans mon application, l'URL de mes services Web n'est pas connue au moment de la compilation, l'application les récupère dans un fichier téléchargé, je me demande donc comment utiliser Retrofit 2 avec une URL dynamique complète.
J'ai essayé de définir un chemin complet comme:
public interface APIService {
@GET("{fullUrl}")
Call<Users> getUsers(@Path("fullUrl") fullUrl);
}
new Retrofit.Builder()
.baseUrl("http://api.mysite.com/")
.build()
.create(APIService.class)
.getUsers("http://api.mysite.com/user/list"); // this url should be dynamic
.execute();
Mais ici, Retrofit ne voit pas que le chemin est en fait une URL complète et tente de télécharger http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist
Une idée de la façon dont je pourrais utiliser Retrofit avec une URL aussi dynamique?
Je vous remercie
Réponses:
Je pense que vous l'utilisez mal. Voici un extrait du changelog :
Donc, votre interface devrait être comme ceci:
la source
Je voulais remplacer seulement une partie de l'url, et avec cette solution, je n'ai pas à passer toute l'url, juste la partie dynamique:
la source
Vous pouvez utiliser l' indicateur codé sur l'
@Path
annotation:/
avec%2F
.?
être remplacé par%3F
, vous ne pouvez donc toujours pas passer de chaînes de requête dynamiques.la source
À partir de Retrofit 2.0.0-beta2, si vous avez un service répondant au JSON à partir de cette URL: http: // myhost / mypath
Ce qui suit ne fonctionne pas:
Mais c'est ok:
la source
Vous pouvez utiliser ceci:
Pour plus d'informations, consultez la documentation https://square.github.io/retrofit/
la source
Étape 1
Étape 2 Pour une meilleure pratique, définissez une classe pour une instance de mise à niveau: -
} Étape 3 définissez dans votre activité: -
la source
La bibliothèque RetrofitHelper écrite en kotlin, vous permettra de faire des appels API, en utilisant quelques lignes de code et vous pouvez utiliser différentes URL, en-têtes et paramètres , dans chaque appel.
Ajoutez plusieurs URL dans votre classe d'application comme ceci:
Et puis utilisez l'URL dont vous avez besoin dans votre appel:
Pour plus d'informations, consultez la documentation
la source
URL dynamique avec méthode Get and Post dans Retrofit (MVVM)
Interface du service de modernisation:
Classe de service MVVM:
et classe de client de rénovation
par exemple Ceci est l'url: https://gethelp.wildapricot.com/en/articles/549-changing-your
baseURL: https://gethelp.wildapricot.com
Restant @Url: / fr / articles / 549-change-your (qui est vous passez en classe de service rétro)
la source
la source
Si vous avez déjà configuré votre code et que vous ne souhaitez pas apporter de modifications sur les différentes interfaces possibles, utilisez la solution décrite dans ce lien . Le point principal est la méthode
changeApiBaseUrl
qui met à jour l'URL et recrée le générateur Retrofit.Vous pouvez l'utiliser comme suit:
la source