Rénovation - Changement BaseUrl
J'ai un scénario où je dois appeler une API avec le même BaseUrl, par exemple www.myAPI.com
, mais avec un autre baseUrl
.
J'ai une instance de Retrofit 2
qui est construit par l'intermédiaire d'un Builder
:
return new Retrofit.Builder().baseUrl(FlavourConstants.BASE_URL).addConverterFactory(GsonConverterFactory.create(gson)).client(okHttpClient).build();
La FlavourConstants.BASE_URL
ressemble à ceci:
public static final String BASE_URL = "http://myApi.development:5000/api/v1/";
Pour certains WebRequests
, je dois appeler la même API, mais sur les autres je dois l'appeler à partir d'un de complètement différent BaseUrl
. Comment puis-je changer la Retrofit
exemple donc de pointer vers une URL différente au cours de l'exécution?
La Retrofit
instance ne dispose pas d'un .setBaseUrl
ou setter
ou quelque chose de similaire comme il est construit par l'intermédiaire d'un Builder
.
Des idées?
- comme vous l'avez déjà mentionné, le
Retrofit
instance est une sorte de immuable (du genre de ce que les Constructeurs sont conçus pour). Donc, vous auriez besoin de créer une autre instance de l'autre URL que vous souhaitez définir.
Vous devez vous connecter pour publier un commentaire.
De la chance pour vous de Rénovation ont une solution simple pour que:
La
url
Chaîne doit spécifier l'adresse Url que vous souhaitez utiliser.GET
méthodes et pas pourHTTP
des méthodes telles que@POST
. J'ai résolu le problème et publierons une réponse une fois que j'ai vérifié qu'il fonctionne.J'ai juste utilisé le dessous de la fonction lorsque j'ai été confronté à ce problème. mais j'étais pressé et je crois que je dois utiliser un autre et j'ai été en utilisant "retrofit2:rénovation:2.0.2"
[Mise à jour]
J'ai trouvé cette lien qui expliquent l' @Url qui peut être transmis en tant que paramètre et je crois que c'est plus professionnel que celui de mon ancienne solution.
Veuillez trouver ci-dessous le scénario:
Et ci-dessous est la méthode de la classe qui offrent la rénovation objet
Ensuite, vous pouvez appeler la méthode ci-dessous:
Rénovation 2.4, MAI 2019
Deux solution simple pour cette tracas sont:
Coder en dur la nouvelle URL, tout en laissant l'URL de base tel qu'il est:
Passer la nouvelle URL en argument, tout en laissant l'URL de base tel qu'il est:
N. B: Ces méthodes de travail pour GET ou POST. Cependant, cette solution n'est efficace que si vous avez besoin d'utiliser une exception d'un ou deux Url différentes que votre URL de base. Sinon, les choses peuvent devenir un peu plus lourde en termes de code de la propreté.
Si votre projet exige entièrement généré dynamiquement la base des Url, alors vous pouvez commencer à lire cette.
La méthode la plus simple (mais pas le plus performant) pour changer le Retrofit2 URL de base au moment de l'exécution est de reconstruire la rénovation exemple avec la nouvelle url:
Alternativement, si vous utilisez OkHttp avec de Rénovation, vous pouvez ajouter un OkHttp intercepteur comme cette une lors de la construction de votre OkHttp client:
il y a Aussi un tel hack dans Kotlin alors que la définition de base de l'urlpar exempleIl ne fonctionne pas. Jette:
Le seul moyen est suggéré par Jake Wharton https://github.com/square/retrofit/issues/2161#issuecomment-274204152
Ok , si je ne me rappelle pas mal les docs de Rénovation a dit que vous pouvez pointer vers une autre URL, si vous suffit simplement d'ajouter dans votre interface servicse l'url complète de la ws, qui est différent fomr la BASE_URL en Rénovation Builder. Un exemple...
Une solution est d'avoir deux distincts instance de rénovation, pour votre saveur de l'URL de base et un autre pour les autres URL de base.
Donc, il suffit de définir deux fonctions :
et après vous avez juste à utiliser la bonne.