2015-10-14 121 views
2

在我的Android应用程序,我试图让注入ArticleView一个DatabaseHelper对象,但匕首以下错误消息抱怨:匕首2俯瞰提供方法

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] 

如何解决呢?

我的代码如下:

@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); 
    } 
    ... 
} 

至于我可以计算上下文已经被ApplicationContextModule#provideApplicationContext提供。

回答

0

在提供的代码中,似乎您错过了将ApplicationContextModule模块包含在组件中。它应该是这样的:

@Component(modules = { ApplicationContextModule.class }) 

而且DatabaseHelper并不需要有@Module注释(它不是一个模块,而只是一个普通的类)。

+0

现在这是固定的,我得到“databaseHelper必须设置”。 – Jenrik

+1

也许最好用当前的代码发布另一个问题(不要编辑当前的答案) – Ognyan