J'obtiens cette erreur après avoir ajouté inject sur ma classe, alors cela me donne une erreur de compilation. Si je supprime
@Inject static ApiService mApiService;
ça marche bien
Et j'utilise la classe 2 Application qui sont étendues MultidexApplication parce que j'ai fusionné. La première application utilise dagger2 et la deuxième application est butterknife. Les deux structures de répertoires sont différentes et les deux applications fonctionnent parfaitement de manière interdépendante. Erreur!
Merci de nous aider à résoudre ma requête
Je suis la structure ci-dessous
@ActivityScope
@Component(dependencies = AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
@Singleton
@Component(modules = {ApplicationModule.class, ApiModule.class})
public interface AppComponent {
Context appContext();
Config config();
ApiService apiService();
}
@Module
public class ActivityModule {
private final Activity mActivity;
public ActivityModule(Activity activity){
mActivity = activity;
}
@Provides
public Context activityContext(){
return mActivity;
}
}
@Module
public class ApiModule {
@Provides
@Singleton
public ApiService apiService(){
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
return new Retrofit.Builder()
.baseUrl(Config.API_URL)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.client(client)
.build()
.create(ApiService.class);
}
}
@Module
public class ApplicationModule {
private final App mApp;
public ApplicationModule(App app) {
mApp = app;
}
@Provides
@Singleton
public Context appContext() {
return mApp;
}
@Provides
@Singleton
public Config config() {
return new Config(mApp);
}
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
public class App extends BrowserApp {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
mAppComponent = DaggerAppComponent.builder().applicationModule(new ApplicationModule(this)).build();
}
public AppComponent getAppAppComponent() {
return mAppComponent;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Juste pour aider les personnes cherchant la solution à ce problème comme moi, incluez les lignes ci-dessous dans le module build.gradle
de votre application (remplacez les dépendances dagger2
existantes).
// Dagger 2
implementation "com.google.dagger:dagger-Android-support:2.11"
implementation "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
Si vous ne trouvez pas la classe de symboles DaggerAppComponent, accédez au dossier:\app\build\généré et supprimez-le, puis reconstruisez le projet.
Avait ce problème. Dans mon cas, j'ai oublié de mettre @Singelton avant toutes les classes de composants.
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
...
}
Dans mon cas j'ai essayé:
La seule chose qui m'a aidé dans mon cas a été d'ouvrir la console " build ", cliquer sur " Basculer la vue " (à gauche de la console et sous le marteau) et corriger les erreurs qui apparaissent sur cet écran .
Dans mon cas, DaggerAppComponent
n'a pas été généré, car j'avais inclus les dépendances dagger2 dans mon sous-module . J'ai supprimé les dépendances à partir de là et les dans module principal de l'application ont résolu le problème.
Avez-vous essayé cela?
@ActivityScope
@Component(modules = ActivityModule.class, dependencies =
AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
Dans mon cas, j'ai ajouté à SomeModule quelque chose comme ceci dans le module Kotlin:
@SomeScope
@Provides
internal fun providesSomeService(activity: MainActivity): SomeServiceProvider {
return SomeServiceProviderImpl(activity)
}
Supprimé et obtenu une autre erreur, puis corrigé. Alors, utilisez Git pour comprendre ce qui ne va pas. Dans Kotlin, vous devez séparer les méthodes @Binds
et @Provides
en différents modules.
J'ai ajouté ci-dessous dans gradle.properties:-
-Pandroid.incrementalJavaCompile=false
Ça a fonctionné pour moi