【问题标题】:Dagger 2 android object null匕首 2 android 对象 null
【发布时间】:2015-11-26 12:20:19
【问题描述】:

我有一个自定义类 Fragment AFragment,它有一个注入属性:AController 控制器。

问题是当我调用它时:controller.onStart() --> 控制器为空。

代码:

类 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();
}
}

A 类控制器:

public class AController {


private final DataInteractor dataInteractor;

@Inject
public AController(DataInteractor dataInteractor){
    this.dataInteractor = dataInteractor;
}

public void onCreate(){

}

public void onStart(){

}
}

【问题讨论】:

  • 你在哪里调用注入的方法?
  • 我是一个android新手,我不知道注入发生在哪里,也不知道它们是如何工作的。
  • 所以你不应该使用 Dagger。它适用于经验丰富且难以掌握的用户。
  • 我同意 Damian 的观点,您可能应该先学习 Android 的基础知识,然后再学习更高级的技术。

标签: android inject dagger-2


【解决方案1】:

您唯一需要做的就是创建一个组件并将 AFragment 注入其中。

@Singleton
@Component
public interface ApplicationComponent {  
    void inject(AFragment fragment);
}

因为在 AController 类中你做了一个构造函数注入,所以你不需要为你的组件创建一个模块。

而且您还需要在应用程序启动时创建组件。所以只需在你的 Application 扩展类中初始化它。

public class DemoApplication extends Application {  
    private ApplicationComponent mComponent;

    @Override 
    public void onCreate() {
        super.onCreate();
        mComponent = DaggerApplicationComponent.builder()
                    .build();
    }

    public ApplicationComponent getComponent() { 
        return mComponent;
    }
}

最后一步就是我之前说的,将AFragment注入到组件中。

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();
}
}

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 2015-11-04
    • 2015-01-17
    相关资源
    最近更新 更多