Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dagger 2 android对象为空_Android_Inject_Dagger 2 - Fatal编程技术网

Dagger 2 android对象为空

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

我有一个自定义的类片段affragment,它有一个注入的属性:AController-controller

问题是,当我调用这个时:controller.onStart->controller为null

守则:

A类碎片:

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的基础知识,然后再学习更先进的技术。