Dagger 2 android对象为空
我有一个自定义的类片段affragment,它有一个注入的属性:AController-controller 问题是,当我调用这个时:controller.onStart->controller为null 守则: A类碎片:Dagger 2 android对象为空,android,inject,dagger-2,Android,Inject,Dagger 2,我有一个自定义的类片段affragment,它有一个注入的属性:AController-controller 问题是,当我调用这个时:controller.onStart->controller为null 守则: A类碎片: public class AFragment extends Fragment { @Inject AController controller; @Override public void onStart() { super.onStart(); co
public class AFragment extends Fragment {
@Inject
AController controller;
@Override
public void onStart() {
super.onStart();
controller.onStart();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
controller.onCreate();
}
}
类控制器:
public class AController {
private final DataInteractor dataInteractor;
@Inject
public AController(DataInteractor dataInteractor){
this.dataInteractor = dataInteractor;
}
public void onCreate(){
}
public void onStart(){
}
}
您唯一需要的就是创建一个组件并将一个片段注入其中
@Singleton
@Component
public interface ApplicationComponent {
void inject(AFragment fragment);
}
因为在AController类中,可以进行构造函数注入,所以不需要为组件创建模块
public class AFragment extends Fragment {
@Inject
AController controller;
@Override
public void onStart() {
super.onStart();
controller.onStart();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((DemoApplication) getApplication()).getComponent().inject(this);
controller.onCreate();
}
}
此外,还需要在应用程序启动时创建组件。所以只需在应用程序扩展类中初始化它
public class DemoApplication extends Application {
private ApplicationComponent mComponent;
@Override
public void onCreate() {
super.onCreate();
mComponent = DaggerApplicationComponent.builder()
.build();
}
public ApplicationComponent getComponent() {
return mComponent;
}
}
最后一步是我前面所说的,将片段注入组件
public class AFragment extends Fragment {
@Inject
AController controller;
@Override
public void onStart() {
super.onStart();
controller.onStart();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((DemoApplication) getApplication()).getComponent().inject(this);
controller.onCreate();
}
}
你到底在哪里调用进行注入的方法?我是android的新手,我不知道注入发生在哪里,也不知道它们是如何工作的。所以你不应该使用Dagger。我同意Damian的观点,你可能应该先学习Android的基础知识,然后再学习更先进的技术。