2015-11-08 66 views
0

我对Dagger2不熟悉,现在我想尝试一下。到目前为止,除了例外,所有事情都将发生。我如何使用Dagger2和CursorLoader

现在我想在我的片段中使用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

如何Activity S和Service S(有时Fragment S)是由框架创建类似,您不能使用构造函数注射ContentProvider秒。如果您将void inject(CategoriesProvider categoriesProvider);方法添加到您的@Component,那么在您的CategoriesProvider.onCreate()方法中,您可以获取组件并致电component.inject(this);

值得一提的是,Application类不会被初始化之后才ContentProvider就做,因此,如果您@ComponentApplication举行,我相信getContext().getApplicationContext()将返回null。看到这个问题:https://code.google.com/p/android/issues/detail?id=8727