2015-10-14 2 views
2

Dans mon application Android J'essaie d'obtenir un objet DatabaseHelper injecté dans ArticleView mais Dagger se plaint avec le message d'erreur suivant:Dagger 2 est situé sur la méthode fournit

Error:(11, 7) error: android.content.Context cannot be provided without an @Provides-annotated method. 
dk.jener.paperflip.ArticleActivity.database 
[injected field of type: dk.jener.paperflip.model.retriever.DatabaseHelper database] 
dk.jener.paperflip.model.retriever.DatabaseHelper.<init>(android.content.Context context) 
[parameter: android.content.Context context] 

Comment puis-je résoudre ce problème?

Mon code est le suivant:

@Singleton 
@Module 
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { 

    @Inject 
    public DatabaseHelper(Context context) { 
     super(context, "foobar", null, 1); 
    } 
    ... 
} 

@Module 
public class ApplicationContextModule { 
    private final Context context; 

    public ApplicationContextModule(Context context) { 
     this.context = context; 
    } 

    @Provides 
    @Singleton 
    public Context provideApplicationContext() { 
     return context; 
    } 
} 

@Singleton 
@Component(modules = { DatabaseHelper.class }) 
public interface RetrieverComponent { 
    void inject(ArticleActivity activity); 
} 

public class ArticleActivity extends AppCompatActivity { 
    @Inject 
    DatabaseHelper database; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     RetrieverComponent component = DaggerRetrieverComponent.builder() 
       .applicationContextModule(new ApplicationContextModule(getApplicationContext())) 
       .build(); 
     component.inject(this); 
    } 
    ... 
} 

Pour autant que je peux comprendre Le contexte est déjà fourni par ApplicationContextModule # provideApplicationContext.

Répondre

0

Dans le code fourni semble que vous avez manqué d'inclure le module ApplicationContextModule dans votre composant. Il devrait être comme:

@Component(modules = { ApplicationContextModule.class }) 

également DatabaseHelper n'a pas besoin d'avoir @Module annotation (il n'est pas un module mais juste une classe normale).

+0

Maintenant que c'est corrigé, j'ai "databaseHelper doit être réglé". – Jenrik

+1

Probablement, il sera préférable de poster une autre question avec votre code actuel (ne pas modifier la réponse actuelle) – Ognyan