必须设置匕首模块

1 android dagger-2

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

我的主要活动

public class MainActivity extends BaseActivity {

@Inject
JsonMethods mJsonMethods;
...
in OnCreate
Weather.getComponent().injectMainActivity(this);
Run Code Online (Sandbox Code Playgroud)

我的天气课

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;
}
}
Run Code Online (Sandbox Code Playgroud)

WeatherComponent

@Component(modules = MainActivityModule.class)
public interface WeatherComponent {
    void injectMainActivity(MainActivity mainActivity);
}
Run Code Online (Sandbox Code Playgroud)

主要活动模块

@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);
}
Run Code Online (Sandbox Code Playgroud)

NetworkModule回报RetrofitGsonOkHttpClient

错误MainActivityModule must be set出现在此代码中:

sWeatherComponent = DaggerWeatherComponent.builder()
                .contextModule(new ContextModule(this))
                .build();
Run Code Online (Sandbox Code Playgroud)

Abu*_*suf 5

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

    sWeatherComponent = DaggerWeatherComponent.builder()
        .contextModule(new ContextModule(this))
        .mainActivityModule(new MainActivityModule(....))
        .build();
Run Code Online (Sandbox Code Playgroud)

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