我如何使用 Dagger2 和 CursorLoader

How can i use Dagger2 and CursorLoader

我对 Dagger2 不熟悉,现在想尝试一下。 目前为止一切正常。

现在我想在我的片段中使用 CursorLoader 并且(当然)我在将我的数据库注入我的 ContentProvider 时遇到了问题。到目前为止,我可以在调用 class 中注入所有内容,但现在我不知道在哪里注入我的 dbHelper class。这是我得到 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 class...

@Inject
public CategoriesProvider(DBHelper dbHelper) {
    this.dbHelper = dbHelper;
}

我不知道如何在这两个元素之间建立联系.. 希望你理解我:)

类似于框架创建 Activitys 和 Services(有时 Fragments)的方式,您不能使用 ContentProvider 的构造函数注入秒。如果您将 void inject(CategoriesProvider categoriesProvider); 方法添加到您的 @Component,那么在您的 CategoriesProvider.onCreate() 方法中您可以获得您的组件并调用 component.inject(this);.

值得注意的是 Application class 直到 ContentProvider 之后才被初始化,所以如果你的 @Component 被保存在你的 Application,我相信 getContext().getApplicationContext() 会 return null。看到这个问题:https://code.google.com/p/android/issues/detail?id=8727.