【发布时间】:2016-10-17 10:24:05
【问题描述】:
根据下面的代码:
@Module
public class AppModule {
private Application application;
public AppModule(Application application) {
this.application = application;
}
@Singleton
@Provides
Context providesContext() {
return application;
}
@Singleton
@Provides
IAppDbHelper providesAppDbHelper() {
// a SQLiteOpenHelper class
return new AppDbHelper(application);
}
}
应用组件:
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
void inject(MainActivity mainActivity);
void inject(SecondActivity secondActivity);
IAppDBHelper providesIAppDBHelper();
}
主要活动: 公共类 MainActivity 扩展 AppCompatActivity { @注入 IAppDBHelper 助手;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((MyApplication)getApplication()).getComponent()
.inject(this);
// It's OK
helper.getWritable().execSQL("XXX");
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
}
第二个活动:
public class SecondActivity extends AppCompatActivity {
@Inject
IAppDBHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
// nullPointer on helper
helper.getWritable().execSQL("XXX");
}
}
在injectAppComponent 在我的SecondActivity 中,nullPointer 错误修复后,但我的问题是每次我想注入IAppDbHelper 时我是否必须inject 我的AppComponent?那么@Singleton 和注入我的MainActivity 是什么意思?他们不应该为我的SecondActivity 注入IAppDbHelper 吗?
【问题讨论】:
标签: android dependency-injection dagger-2