2015-11-08 1 views
0

Je ne suis pas familier avec Dagger2 et maintenant je veux essayer. Jusqu'à présent, tout va aussi loin que prévu.Comment puis-je utiliser Dagger2 et CursorLoader

Maintenant, je veux utiliser CursorLoader dans mon fragment et (bien sûr) j'ai un problème pour injecter ma base de données dans mon ContentProvider. Jusqu'à présent, je peux tout injecter dans la classe appelante mais maintenant je ne sais pas où injecter ma classe dbHelper. Voici les deux extraits où je reçois un 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); 
} 

Dans mon ContentProvider je veux injecter la classe DBHelper ...

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

Je ne sais pas comment faire le lien entre les deux éléments .. espère que vous me comprenez :)

Répondre

1

similaires à la façon dont Activity s et Service s (et parfois Fragment s) sont créés par le cadre, vous ne pouvez pas utiliser l'injection de constructeurs avec ContentProvider s. Si vous ajoutez une méthode void inject(CategoriesProvider categoriesProvider); à votre @Component, dans votre méthode CategoriesProvider.onCreate(), vous pouvez obtenir votre composant et appeler le component.inject(this);.

Il convient de noter que la classe Application ne soit pas initialisé qu'après ContentProvider de faire, donc si votre @Component se tient dans votre Application, je crois que getContext().getApplicationContext() retournerait null. Voir ce numéro: https://code.google.com/p/android/issues/detail?id=8727.