Я создал прикладной модуль с именем AppRetroServiceModule
для обеспечения модернизации.
@Module(includes = NetworkModule.class)
public class AppRetroServiceModule {
@Provides
@AppScope
public RetroService retroService(Retrofit retrofit) {
return retrofit.create(RetroService.class);
}
@Provides
@AppScope
public Retrofit retrofit(OkHttpClient okHttpClient, Gson gson) {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.baseUrl("http://webservise/Srv1.svc/json/")
.build();
}
}
Как видите, baseUrl жестко запрограммирован и исправлен.В компоненте приложения я создал getter для получения модификации и другого провайдера, когда компонент приложения является зависимостью для другого компонента:
@AppScope
@Component(modules = {NetworkModule.class, AppRetroServiceModule.class})
public interface IApplicationComponent {
RetroService getRetroService();
Gson getGsonBuilder();
Context getAppContext();
}
Я инициализировал кинжал в классе приложения:
public class App extends Application {
private IApplicationComponent component;
...
@Override
public void onCreate() {
super.onCreate();
Timber.plant(new Timber.DebugTree());
component = DaggerIApplicationComponent.builder()
.networkModule(new NetworkModule(this))
.build();
}...
public IApplicationComponent getAppComponent() {
return component;
}
}
Теперь в основномАктивность Мне нужно использовать другие baseurl
для получения данных с сервера:
public class MainActivity extends AppCompatActivity implements IMain.IMainView {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_m);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
DaggerIMainComponent.builder()
.iApplicationComponent(((App) getApplication()).getAppComponent())
.build()
.inject(this);
...
Поскольку модификация инициализируется при запуске приложения, как я могу изменить модификацию в любое время baseurl
, когда мне нужно получить данные с серверовв другой деятельности или фрагменте?Иногда мне нужно подключиться к числу серверов и получить данные с этих серверов и использовать их в одном действии, тогда мне нужно менять baseurl
каждый раз, когда мне нужно.