2015-08-14 45 views
1

下面是LoginActivity類如何將所有值存儲到從dagger2注入的類對象?

@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); 
} 

下面是我簡單的匕首模塊類

@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 = user;
但是這行不起作用,因爲injectUser變量不會保留下一個活動的值,但是它被設置爲singleton in匕首提供者用戶方法。

我不想設定每個值從Web服務獲得通過如下圖所示

injectedUser.setAuthTokenWebService(user.getAuthTokenWebService()); 
injectedUser.setUserId(user.getUserId()); 

是這樣工作的,但是否有其他方式injectedUser可以有用戶對象從獲取的值相同輸入代碼服務或我必須設置每個值如上所示?

+0

我發現一個黑客...那一世。在用戶類中創建用戶引用,並通過setter或getter設置並獲取用戶,或者在構造函數User(新用戶())中傳遞它 –

回答

1

當然這「失去價值」,you're just altering the pointer to the User object, and not the User object itself.

你需要提供一個支架。

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); 
相關問題