我如何使用Dagger2和CursorLoader

时间:2015-11-08 13:05:22

标签: android dependency-injection dagger-2

我不熟悉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;
}

我不知道如何在两个元素之间建立连接.. 希望你理解我:)。

1 个答案:

答案 0 :(得分:1)

与框架创建的ActivityService(有时是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