我不熟悉Dagger2,现在我想尝试一下。 到目前为止,一切都是例外。
现在我想在我的片段中使用CursorLoader(当然)我有一个问题是在我的ContentProvider中注入我的数据库。到目前为止,我可以在调用类中注入所有内容,但现在我不知道在哪里注入我的dbHelper类。这里是我获得NPE的两个片段。
// My Fragment code... works fine
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(getContext(), CategoriesProvider.uriCategories(),
CategoryContract.CATEGORIE_PROJECTION, null, null, null);
}
在我的ContentProvider中,我想注入DBHelper类......
@Inject
public CategoriesProvider(DBHelper dbHelper) {
this.dbHelper = dbHelper;
}
我不知道如何在两个元素之间建立连接.. 希望你理解我:)。
答案 0 :(得分:1)
与框架创建的Activity
和Service
(有时是Fragment
s)类似,您不能使用ContentProvider
s构造函数注入。如果您向void inject(CategoriesProvider categoriesProvider);
添加@Component
方法,则可以在CategoriesProvider.onCreate()
方法中获取您的组件并致电component.inject(this);
。
值得注意的是,Application
类在ContentProvider
之后才会初始化,所以如果您的@Component
保留在Application
中,我相信{ {1}}将返回getContext().getApplicationContext()
。请参阅此问题:https://code.google.com/p/android/issues/detail?id=8727。