[英]How can store all values to a class object injected from dagger2?
下面是LoginActivity類
@Inject
User injectedUser;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.login2);
MyApp.getComponent(this).inject(this); // injection completed here
}
@Subscribe public void onLoginCompleted(UserResultEvent event)
{
Log.e(" Finding ", injectedUser.getAuthTokenWebService());
User user = event.user;
injectedUser = user; // injectedUser looses values for next activity
// By setting each value as shown in given below two lines,
//I am able to get values on another activity, in my case, DashBoard class
//injectedUser.setAuthTokenWebService(user.getAuthTokenWebService());
//injectedUser.setUserId(user.getUserId());
Intent intent = new Intent(LoginActivity.this, Dashboard.class);
startActivity(intent);
}
下面是我簡單的Dagger Module類
@Module
public class MyAppModule
{
private final MyApp app;
public MyAppModule(MyApp app) { this.app = app; }
@Provides @Singleton MyApp provideMyApp() { return app; }
@Provides @Singleton
Application provideApplication(MyApp app) { return app; }
// getting User Object
@Provides @Singleton
User provideUser(){ return new User(); }
}
我上一個儀表板活動課程是
@Inject
User user;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.dashb_main);
MyApp.getComponent(this).inject(this);
// Here is the problem,
Log.e("Dashboard ", String.valueOf(user.getAuthTokenWebService()));
}
Log.e("Dashboard ", String.valueOf(user.getAuthTokenWebService()));
給了我AuthToken的默認值,但是它應該打印不同的值,因為它是在LoginActivity類中設置的,即,injectedUser injectedUser = user;
但是此行無效,因為jectedUser變量不會保留下一個活動的值,但是在dagger providerUser方法中將其設置為單例。
我不想通過鍵入如下所示的代碼來設置從Web服務獲得的每個值
injectedUser.setAuthTokenWebService(user.getAuthTokenWebService());
injectedUser.setUserId(user.getUserId());
它以這種方式工作,但是還有其他方法可以使InjectionUser可以具有從服務中獲取的User對象相同的值,或者我必須如上所述設置每個值?
當然,它“丟失值”, 您只是在更改指向User對象的指針,而不是更改User對象本身。
您需要提供一個持有人。
public class UserHolder {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
然后
@Module
public class MyAppModule {
//...
@Provides
@Singleton
public UserHolder userHolder(User user) {
UserHolder userHolder = new UserHolder();
userHolder.setUser(user);
return userHolder;
}
@Provides
@Singleton
public User user() {
return new User();
}
}
然后
@Inject
UserHolder userHolder;
Log.e("Dashboard ", String.valueOf(userHolder.getUser().getAuthTokenWebService()));
和
@Inject
UserHolder userHolder;
@Subscribe public void onLoginCompleted(UserResultEvent event) {
Log.e(" Finding ", userHolder.getUser().getAuthTokenWebService());
User user = event.user;
userHolder.setUser(user);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.