我试图添加 Dagger2。但是,我无法弄清楚这个编译错误: MainActivityModule must be set 发生在我的 MainActivity 中。如果有人会尝试对此错误有所了解。我真的会很高兴。

我的主要 Activity

public class MainActivity extends BaseActivity {

@Inject
JsonMethods mJsonMethods;
...
in OnCreate
Weather.getComponent().injectMainActivity(this);

我的天气类
public class Weather extends Application {

private static WeatherComponent sWeatherComponent;

@Override
public void onCreate() {
    super.onCreate();
    sWeatherComponent = DaggerWeatherComponent.builder()
            .contextModule(new ContextModule(this))
            .build();
}

public static WeatherComponent getComponent() {
    return sWeatherComponent;
}
}

天气组件
@Component(modules = MainActivityModule.class)
public interface WeatherComponent {
    void injectMainActivity(MainActivity mainActivity);
}

MainAcitivtyModule
@Module(includes = NetworkModule.class)
public class MainActivityModule {

private final MainActivity mainActivity;

public MainActivityModule(MainActivity mainActivity) {
    this.mainActivity = mainActivity;
}

@Provides
@WeatherApplicationScope
public JsonMethods provideJsonMethods(Retrofit retrofit) {
    return new JsonMethods(mainActivity, retrofit);
}

NetworkModule 返回 Retrofit , Gson , OkHttpClient
错误 MainActivityModule must be set 出现在此代码中:
sWeatherComponent = DaggerWeatherComponent.builder()
                .contextModule(new ContextModule(this))
                .build();

最佳答案

您必须像创建 MainActivityModule 实例一样创建 ContextModule 实例。您的 MainActivityModule 没有任何默认构造函数,因此 Dagger 无法创建 MainActivityModule 的实例。因此,创建一个 MainActivityModule 实例并将其设置为 Dagger 图。

    sWeatherComponent = DaggerWeatherComponent.builder()
        .contextModule(new ContextModule(this))
        .mainActivityModule(new MainActivityModule(....))
        .build();

如果模块没有任何用户定义的构造函数,那么 Dagger 将在需要时通过默认构造函数自动创建一个实例。

关于android - 必须设置 Dagger 模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49967641/

10-13 07:59