使用动态数据匕首 [英] Dagger using dynamic data
问题描述
我有DI在我的项目。其中一个模块是的AppModule
,他将提供 RestClient
I have DI in my project. One of modules is AppModule
and he is providing RestClient
@WithoutAuth
@Provides
@Singleton
RestAdapter provideRestAdapter(final RemontnikPreferences preferences) {
final String userAndPassword = preferences.getUsername() + ":" + preferences.getPassword();
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Authorization", "Basic " + Base64.encodeToString(userAndPassword.getBytes(), Base64.NO_WRAP));
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://")
.setRequestInterceptor(
.build();
preferences.setPassword("");
return restAdapter;
}
在登录片段输入我的用户名和密码,它们保存到共享preferences
一切似乎是不错的。授权的作品。
On the login fragment I enter my username and password, they saves into SharedPreferences
all seems be good. Authorization works.
但是,如果我输入错误的凭据,它们保存到共享preferences,但是,当我重新输入有效凭据我的 RestClient
犯规更新,因为的AppModule
实例只有一次应用程序启动时。我怎样才能重新创建的AppModule
来使用新的共享preferences?
But if i enter wrong credentials, they saves into shared preferences, but when i'm re-enter valid credentials my RestClient
doesnt updating, because AppModule
instantiate only once when the application starts. How can i re-create AppModule
to use new shared preferences?
推荐答案
现在的问题是,你正在创建的 userAndPassword
字符串当您创建的适配器。
The problem is that you are creating the userAndPassword
string when you create the adapter.
@WithoutAuth
@Provides
@Singleton
RestAdapter provideRestAdapter(final RemontnikPreferences preferences) {
RequestInterceptor requestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
String userAndPassword = preferences.getUsername() + ":" + preferences.getPassword();
request.addHeader("Authorization", "Basic " + Base64.encodeToString(userAndPassword.getBytes(), Base64.NO_WRAP));
}
};
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://")
.setRequestInterceptor(requestInterceptor)
.build();
preferences.setPassword("");
return restAdapter;
}
然后创建一个请求时,和拦截器被调用时,它会检查preferences和拉它需要的值。
Then each time a request is created, and the interceptor is called, it will check preferences and pull in the values it needs.
这篇关于使用动态数据匕首的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!