Dagger + URL dinámica de actualización
PROBLEMA
Necesito llamar a API desde dominios ingresados por USUARIO y necesito editar miRetrofit
singleton antes de la llamada de acuerdo con los datos insertados.
¿Hay alguna manera de "restablecer" mi singleton, forzándolo a recrearse?
o
¿Hay alguna manera de actualizar mibaseUrl
con mis datos (¿tal vez en Interceptor?) justo antes de la llamada?
CÓDIGO
Singletons
@Provides
@Singleton
Retrofit provideRetrofit(SharedPreferences prefs) {
String apiUrl = "https://%1s%2s";
apiUrl = String.format(apiUrl, prefs.getString(ACCOUNT_SUBDOMAIN, null), prefs.getString(ACCOUNT_DOMAIN, null));
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor())
.build();
return new Retrofit.Builder()
.baseUrl(apiUrl)
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
@Provides
@Singleton
API provideAPI(Retrofit retrofit) {
return retrofit.create(API.class);
}
API
@FormUrlEncoded
@POST("endpoint")
Observable<Response> logIn(@Field("login") String login, @Field("password") String password);
Como funciona ahora
Bueno, la idea era guardar los datos del dominio del usuario a través deSharedPrefs
antes de la llamada API y modificarbaseUrl
con cadena formateada.