Establezca la URL base dinámica usando Retrofit 2.0 y Dagger 2

Estoy tratando de realizar una acción de inicio de sesión con Retrofit 2.0 con Dagger 2

Así es como configuro la dependencia de Retrofit

@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient client) {
    Retrofit retrofit = new Retrofit.Builder()
                            .addConverterFactory(GsonConverterFactory.create(gson)
                            .client(client)
                            .baseUrl(application.getUrl())
                            .build();
    return retrofit;     
}

Aquí está la interfaz API.

interface LoginAPI {
   @GET(relative_path)
   Call<Boolean> logMe();
}

Tengo tres URL base diferentes en las que los usuarios pueden iniciar sesión. Por lo tanto, no puedo establecer una URL estática al configurar la dependencia de Retrofit. Creé los métodos setUrl () y getUrl () en la clase de aplicación. Al iniciar sesión, configuro la URL en la aplicación antes de invocar la llamada API.

Yo uso la inyección perezosa para una modificación como esta

Lazy<Retrofit> retrofit

De esa manera, Dagger inyecta dependencia solo cuando puedo llamar

retrofit.get()

Esta parte funciona bien. Obtuve la url configurada para actualizar la dependencia. Sin embargo, el problema surge cuando el usuario escribe una URL de base incorrecta (por ejemplo, mywifi.domain.com), entiende que es incorrecta y la cambia (por ejemplo, mydata.domain.com). Dado que Dagger ya creó la dependencia para la actualización, no volverá a funcionar. Entonces tengo que volver a abrir la aplicación y escribir la URL correcta.

Leí diferentes publicaciones para configurar URL dinámicas en Retrofit usando Dagger. Nada realmente funcionó bien en mi caso. ¿Echo de menos algo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta