2013-06-07 6 views
5

Ho un'applicazione Android e sto cercando di usare il pugnale. Ho deciso di utilizzare un grafico globale + grafici di attività. Ho tre moduli:Grafico di attività del pugnale e moduli separati

AndroidModule

@Module(library = true) 
public class AndroidModule { 

    private final MApplication mApplication; 

    public AndroidModule(MyApplication application) { 
    mApplication = application; 
    } 

    @Provides @Singleton @ForApplication Context provideApplicationContext() { 
    return mApplication; 
    } 
} 

MyAppModules

@Module(
    injects = { 
      MainActivity.class, 
      AddFragment.class, 
      AddMapFragment.class, 
      MyActivity.class, 
      ListFragment.class, 
      MyMapFragment.class, 
      RetainFragment.class, 
      SingleActivity.class, 
      UserActivity.class, 
      UserLoginFragment.class, 
      UserProfileActivity.class, 
      UserProfileFragment.class, 
      UserRegisterFragment.class, 
      WelcomeFragment.class 
    }, 
    complete = false, 
    library = true, 
    includes = ActivityModule.class 
) 
public class MyAppModule { 

    private final Bus mBus = new Bus(); 

    @Provides @Singleton Bus provideBus() { 
    return mBus; 
    } 

    @Provides @Singleton 
    RequestQueue provideRequestQueue(@ForApplication Context context) { 
    return Volley.newRequestQueue(context); 
    } 

    @Provides @Singleton Api provideApi(RequestQueue queue) { 
    return new AppApi(queue); 
    } 

    @Provides Logger provideLogger() { 
    return new MyLogger(); 
    } 
} 

ActivityModule

@Module(
    complete = false, 
    library = true 
) 
public class ActivityModule { 

    private BaseActivity mActivity; 
    public ActivityModule() {} 

    public ActivityModule(BaseActivity activity) { 
    mActivity = activity; 
    } 

    @Provides @Singleton @ForActivity Context provideActivityContext() { 
    return mActivity; 
    } 

    @Provides @Singleton LocationClientFactory provideLocationClientFactory() { 
    return new LocationClientFactory(mActivity); 
    } 
} 

ho dovuto usare includere MyAppModule per il ActivityModule, senza di essa, l'applicazione si è schiantato dicendo che potrebbe trovare un costruttore su Context e non è stato possibile iniettare ContextActivity.

Il grafico è configurato correttamente? Sto aggiungendo i moduli al grafico nel numero Application e in un BaseActivity e ho pensato che fosse sufficiente e non avevo bisogno dell'inserimento, ma non sono sicuro di comprendere appieno il processo di configurazione di questo.

Modifica

Ti piace questa, pugnale dà nessun errore, ma se provo a iniettare un ActivityContext, in fase di esecuzione E 'null.

risposta

4

La soluzione, se qualcuno è interessato, è stato quello di rimuovere le

injects = { 
     MainActivity.class, 
     AddFragment.class, 
     AddMapFragment.class, 
     MyActivity.class, 
     ListFragment.class, 
     MyMapFragment.class, 
     RetainFragment.class, 
     SingleActivity.class, 
     UserActivity.class, 
     UserLoginFragment.class, 
     UserProfileActivity.class, 
     UserProfileFragment.class, 
     UserRegisterFragment.class, 
     WelcomeFragment.class 
} 

da MyAppModule e metterlo in ActivityModule.

+0

Questo perché (se si utilizza il campione [Grafici attività] (https://github.com/square/dagger/tree/master/examples/android-activity-graphs)) il grafico dell'oggetto dell'attività è la cosa che 'addedTo' MyAppModule. Inoltre, se stai facendo 'include' del tuo modulo di attività, sono abbastanza sicuro che una parte del grafico sia costruita prima di volerlo, cioè quando l'attività è attiva solo. –

+0

Quindi controlla come risposta – Caipivara

+0

Ehi @alex, puoi inserire qui esattamente come hai creato i grafici nelle classi di Applicazione e Attività? – bogdan

Problemi correlati