Reputation:
I was trying to add Dagger2. However, I am not able to figure out this compilation error: MainActivityModule must be set
which happens in my MainActivity
. If someone will try to throw some light on this error. I would really be glad.
My MainActivity
public class MainActivity extends BaseActivity {
@Inject
JsonMethods mJsonMethods;
...
in OnCreate
Weather.getComponent().injectMainActivity(this);
My Weather class
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;
}
}
WeatherComponent
@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 return Retrofit
, Gson
, OkHttpClient
Error MainActivityModule must be set
appears in this code:
sWeatherComponent = DaggerWeatherComponent.builder()
.contextModule(new ContextModule(this))
.build();
Upvotes: 6
Views: 3091
Reputation: 6107
You have to create a MainActivityModule
instance like you created ContextModule
instance. Your MainActivityModule
don't have any default constructor so Dagger
can't created an instance of MainActivityModule
. So create an MainActivityModule
instance and set it to Dagger
graph.
sWeatherComponent = DaggerWeatherComponent.builder()
.contextModule(new ContextModule(this))
.mainActivityModule(new MainActivityModule(....))
.build();
If modules don't have any user defined constructor then Dagger
will automatically create an instance via default constructor when required.
Upvotes: 10