0
创建我创建retrofit2
动态设置,当它与Dagger2
@Module
public class NetworkModule {
private Context context;
public NetworkModule(Application app) {
this.context = app;
}
@Singleton
@Provides
Context providesContext() {
return context;
}
@Singleton
@Provides
OkHttpClient providesOkHttpClient(Utils utils) {
User user = utils.getSettings();
return new OkHttpClient.Builder()
.connectTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.writeTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.readTimeout(Long.valueOf(user.getTimeOut()), TimeUnit.SECONDS)
.build();
}
@Singleton
@Provides
Retrofit providesRetrofit(OkHttpClient okHttpClient, Utils utils) {
User user = utils.getSettings();
String host = user.getHost();
if (!host.endsWith("/")) host += "/";
return new Retrofit.Builder()
.baseUrl(host)
.addConverterFactory(JacksonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient).build();
}
@Singleton
@Provides
RestApiFactory providesRestApiFactory(Retrofit retrofit) {
return new RestApiFactory(retrofit);
}
}
dagger2
模块我有设置活动,其中用户可以改变的baseUrl,超时。如果我创建
providesRetrofit
providesRestApiFactory
providesOkHttpClient
像@Singleton
- 后改变设置也不会改变。如果我删除@Singleton
注释 - 所有的工作。我的问题 - 当用户更改数据时,如何更新匕首@Singleton
?在单独的组件
再次尝试拨打Builder.build。这可能需要一大笔费用,我不知道,但它可能是工作。 – VolkanSahin45