Установите динамический базовый URL, используя Retrofit 2.0 и Dagger 2
Я пытаюсь выполнить действие входа в систему с помощью Retrofit 2.0 с помощью Dagger 2
Вот как я могу установить зависимость 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;
}
Вот интерфейс API.
interface LoginAPI {
@GET(relative_path)
Call<Boolean> logMe();
}
У меня есть три разных базовых URL-адреса, в которые могут войти пользователи. Поэтому я не могу установить статический URL при настройке зависимости Retrofit. Я создал методы setUrl () и getUrl () для класса Application. При входе пользователя в систему я устанавливаю URL-адрес приложения, прежде чем вызывать вызов API.
Я использую ленивую инъекцию для модернизации, как это
Lazy<Retrofit> retrofit
Таким образом, Dagger вводит зависимость только тогда, когда я могу вызвать
retrofit.get()
Эта часть работает хорошо. Я получил URL для установки зависимости. Однако проблема возникает, когда пользователь вводит неправильный базовый URL-адрес (скажем, mywifi.domain.com), понимает, что это неправильный URL-адрес, и изменяет его (например, mydata.domain.com). Поскольку Dagger уже создал зависимость для модернизации, он больше не будет работать. Поэтому я должен снова открыть приложение и ввести правильный URL-адрес.
Я читаю разные посты по настройке динамических ссылок на Retrofit с помощью Dagger. В моем случае ничего не получилось. Я что-то пропустил?