Poignard 2 composant qui n'est pas généré
Dans mon module, dans mon Application de base de classe
component = DaggerCompClassComponent.builder()
.classModule(new ModuleClass()).build();
il ne peut pas trouver DaggerCompClassComponent.
Que j'ai sur le module de construire.gradle
apply plugin: 'com.neenbedankt.android-apt'
.........................
apt 'com.google.dagger:dagger-compiler:2.8'
compile 'com.google.dagger:dagger:2.8'
provided 'javax.annotation:jsr250-api:1.0'
et dans le Projet de construction.gradle,
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
J'ai fait construire /reconstruire /propre /redémarrage du projet. J'ai une classe de Composant où j'ai injecter des objets et un ModuleClass où je fournir des objets à injecter.
Ce qui peut être la cause pour ne pas générer de Poignard Composant . classe ?
EDIT:
C'est mon ModuleClass, adnotated avec @Module:
@Provides
@Singleton
public Interceptor provideInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
builder.addHeader("AppName-Android", BuildConfig.VERSION_NAME + "-" + BuildConfig.VERSION_CODE)
.addHeader("Content-Type", "application/json");
return chain.proceed(builder.build());
}
};
}
@Provides
@Singleton
OkHttpClient provideOkHttpClient(Interceptor interceptor) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.interceptors().add(interceptor);
return builder.build();
}
@Provides
@Singleton
Retrofit provideRetrofit(OkHttpClient client) {
return new Retrofit.Builder()
.baseUrl(BaseApplication.getRes().getString(R.string.api_base_url))
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
}
@Provides
@Singleton
WebServiceCall provideWebService(Retrofit retrofit) {
return retrofit.create(WebServiceCall.class);
}
Et c'est ma Classe de Composant:
@Component(modules = ModuleClass.class)
@Singleton
public interface ComponentClass {
void inject(Interceptor o);
void inject(OkHttpClient o);
void inject(Retrofit o);
void inject(WebServiceCall o);
}
Ajouter vos Modules et de Composants à la question
Ceux
J'ai effacé aucun effet!
Dans ce cas, vous devriez vérifier le compilateur de messages et de voir si il n'y a rien d'autre qui a échoué.
Erreur:(25, 21) erreur: impossible de trouver le symbole de variable DaggerClassComponent d'Erreur:échec de l'Exécution de la tâche:sdk:compileReleaseJavaWithJavac'. > Compilation a échoué; voir le compilateur sortie d'erreur pour plus de détails.
Ceux
void inject(...)
méthodes sont tous des faux, retirez tous les 4 d'entre euxJ'ai effacé aucun effet!
Dans ce cas, vous devriez vérifier le compilateur de messages et de voir si il n'y a rien d'autre qui a échoué.
Erreur:(25, 21) erreur: impossible de trouver le symbole de variable DaggerClassComponent d'Erreur:échec de l'Exécution de la tâche:sdk:compileReleaseJavaWithJavac'. > Compilation a échoué; voir le compilateur sortie d'erreur pour plus de détails.
OriginalL'auteur ghita | 2017-05-03
Vous devez vous connecter pour publier un commentaire.
Lors du développement sur Kotlin, vous devez ajouter les lignes suivantes à côté de leur
annotationProcessor
homologues:et ajouter
apply plugin: 'kotlin-kapt'
au début du même fichier.Que l'article ressemble à ça pour moi:
OriginalL'auteur Gonzalo
Voici la solution pour les frais Poignard projet.
Ces deux lignes sont responsables pour générer le moment de la compilation dans le cadre de la Dague 2.
compile 'com.google.dagger:dagger:2.14.1'
//génère cadre de la compilation
//génère cadre de la compilation basée sur les annotations que vous avez fournis.annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1'
Complète de la configuration de la Dague
Note: Vous devez configurer le Processus d'Annotation, comme prévu dans la capture d'écran ci-dessous. Vous pouvez le faire

File>Other Settings>Default Settings>
de recherche"Annotation processor"
OriginalL'auteur Uddhav Gautam
Peut-être que vous avez oublié de les annoter ModuleClass avec @Module ?
OriginalL'auteur Alex Shutov
Il y a quelques petites idées fausses pannes dans votre code ci-dessus, voici un travail de mise en œuvre:
Application.java:
La classe générée sera nommé
DaggerComponentClass
, pasDaggerCompClassComponent
. Si vous ne pouvez pas exécuter votre application sur l'Android Studio pour faire construire, essayez de Construire->Nettoyage de projet et de construction>projet de Reconstruction dans le menu. Si tout est OK Poignard aura compiléDaggerComponentClass
, qui sera situé dans le même package queComponentClass
.ComponentClass.java:
Un Composant dans Dagger2 a des méthodes nommé
inject
qui reçoivent de l'instance pour obtenir des instances injecté dans, pas l'inverse. Dans le code ci-dessus, la classeAClassThatShouldGetInstancesInjected
généralement appelcomponentClass.inject(this);
pour obtenir des instances injecté dans lui-même.ModuleClass.java:
Le Module est correct dans votre code, assurez-vous que annoté.
I removed @Singleton from ComponentClass since it's an annotation that is only relevant for modules.
de messagerie unifiée, non?EpicPandaForce Pourrait être une hypothèse erronée, mais de ce que j'ai vu dans la documentation @Singleton n'est pas utilisé dans les Composants
maintenant que vous avez fait m'a fait incertain, mais je pense que l'application portée sur le composant en fait une "étendue de la composante" qui va en faire voir de toutes
@Singleton
classes annotées avec@Inject
constructeur, et c'est dans beaucoup d'exemples que vous pouvez trouver qui traînent autour de stackoverflow.com/a/40751767/2413303 mais peut-être que nous nous sommes tous trompés, hahaJ'ai ajouté de la grève au-dessus de la partie! J'ai trouvé une utilisation de
@Singleton
dans les Composants dans le officiel docs pour Dagger2 google.github.io/dagger/subcomponents.html donc suppose que vous avez raison 😉Je ne t obtenir ce qui est le changement que vous proposez. Ce que je dois modifier?
OriginalL'auteur Pär Nils Amsen
Si vous avez plusieurs modules dans votre AndroidStudio (modules en termes d'Android Studio, pas de Poignard), une autre raison de l'échec est que vous avez oublié de mettre l'annotation des processeurs dans les tous les modules'
build.gradle
.Nous avons divisé notre application en plusieurs modules, mis à jour les dépendances de l'aide
implementation
à l'aide deapi
mais vous avez oublié de gérer l'annotation des processeurs en conséquence.Alors, vous pouvez avoir ces lignes seulement dans une racine de module:
Mais cela doit être spécifié dans tous les modules dépendances:
OriginalL'auteur Gaket
Dans la construction.gradle de l'application, vous avez besoin d'ajouter des dépendances nécessaires pour la Dague pour générer des classes correspondantes, comme ci-dessous:
vous devriez changer de poignard de la version que vous utilisez.
reportez-vous à plein de la dague document dans cette
OriginalL'auteur Mr Special
Si Dagger2 ne pouvez pas générer de ses composants, cela signifie que votre code a quelques erreurs avec les Étendues de/Modules. Consultez nos votre @Fournit/Injecter des méthodes.
UPD:
Vous devez injecter des composants dans le cas où vous avez besoin d'instances de classes fournies par le module.
comme
vous devez injecter des composants dans les classes où vous voulez module instances injecté
J'ai injecté les dépendances que j'ai besoin dans mon projet. Pourquoi devrais-je les supprimer?
comme je l'ai dit nulle injecter(Intercepteur o); void injecter(OkHttpClient o); void injecter(Rénovation o); void injecter(WebServiceCall o); qui est totalement faux et n'ont pas de sens du tout. Lire quelques tutoriels pour l'utilisation de la Dague 2
sont utilisés dans le module, mais si vous souhaitez exposer un objet à un autre composant, qui est le temps de vous déclarer la méthode de l'interface qui exposent l'objet.
OriginalL'auteur Anton Kazakov
OriginalL'auteur sudhanshu