簡體   English   中英

如何將所有值存儲到從dagger2注入的類對象中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM