Issue I am facing:
//DaggerNetComponent is not getting generated
mNetComponent = DaggerNetComponent.builder()
.appModule(new AppModule(this))
.netModule(new NetModule("https://api.github.com"))
.build();
import android.app.Application;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
@Module
public class NetModule {
String mBaseUrl;
public NetModule(String mBaseUrl) {
this.mBaseUrl = mBaseUrl;
}
@Provides
@Singleton
Cache provideHttpCache(Application application) {
int cacheSize = 10 * 1024 * 1024;
Cache cache = new Cache(application.getCacheDir(), cacheSize);
return cache;
}
@Provides
@Singleton
Gson provideGson() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
return gsonBuilder.create();
}
@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache) {
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.cache(cache);
return client.build();
}
@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(mBaseUrl)
.client(okHttpClient)
.build();
}
}
import android.app.Application;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
@Module
public class AppModule {
Application mApplication;
public AppModule(Application mApplication) {
this.mApplication = mApplication;
}
@Provides
@Singleton
Application provideApplication() {
return mApplication;
}
}
import javax.inject.Singleton;
import dagger.Component;
import retrofit.modules.AppModule;
import retrofit.modules.NetModule;
@Singleton
@Component(modules = {AppModule.class, NetModule.class})
public interface NetComponent {
void inject(MainActivity activity);
}
How to Debug this so I am able to generate this class
I think this is because of Cache provideHttpCache(Application application)
in NetModule
.
Yes, you provides Application
within AppModule
, but it does not have any association with NetComponent
.
So, there are three ways:
1. Just pass Application
manually into NetComponent
the same way you did it with AppComponent
(via constructor)
or (better way)
2. Create separate Component
for AppModule
- AppComponent
which should provide Application
to other components:
@Component(modules = {
AppModule.class,
})
@Singleton
public interface AppComponent {
Application application();
}
And then make your NetComponent
to be dependent from AppComponent
:
@Component(
dependencies = AppComponent.class,
modules = NetModule.class
)
@NetScope
public interface NetComponent {
void inject(AddTranslationActivity activity);
}
or
3. Do the same as described in item 2, but using Dagger subcomponents