【发布时间】:2015-08-14 18:10:21
【问题描述】:
下面是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 = user;
但是这一行没有效果,因为注入的用户变量不保留下一个活动的值,但是它在匕首 providerUser 方法中设置为单例。
我不想通过键入如下所示的代码来设置从 Web 服务获取的每个值
injectedUser.setAuthTokenWebService(user.getAuthTokenWebService());
injectedUser.setUserId(user.getUserId());
它以这种方式工作,但是是否有任何其他方式可以让注入用户从服务中获取相同的用户对象值,或者我必须设置每个值,如上所示?
【问题讨论】:
-
我发现了一个黑客......我,。在 User Class 中创建 User 引用并通过 setter 或 getter 设置和获取 User 或将其传递给构造函数 User(new User())
标签: java android singleton pass-by-reference dagger-2