2017-10-17 14 views
1

J'ai utilisé la dague 2.11 AndroidInjection sans problèmes jusqu'à ce que j'ai essayé d'injecter mon service Retrofit dans un Authenticator OkHttp afin de gérer les délais d'attente de session. AndroidInjection permet uniquement les injections dans les activités, les fragments, les services, les fournisseurs de contenu et les récepteurs de diffusion. Mes questions sont comment puis-je utiliser le nouveau Dagger AndroidInjection dans une classe qui ne figure pas dans la liste ci-dessus?Dagger 2.11 Injecter dans OkHttp Authenticator

+2

Si je ne me trompe pas, vous pouvez simplement utiliser @Inject pourquoi avez-vous besoin d'utiliser AndroidInjection? – savepopulation

+0

Jetez un oeil à [this] (https://stackoverflow.com/questions/45075204/how-do-i-use-androidinjection-class-in-custom-views-or-other-android-classes/45195327#45195327). – azizbekian

Répondre

0

utiliser Simplement injectez pour fournir Retrofit, dans le même module que vous fournissez également okhttp qui est utilisé par la modernisation

@Singleton 
@Provides 
OkHttpClient providesOkHttpClient(){ 
    return new OkHttpClient.Builder() 
      .connectTimeout(RETROFIT_API_CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS) 
      .readTimeout(RETROFIT_API_CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS) 
      .writeTimeout(RETROFIT_API_CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS) 
      .build(); 
} 

@Singleton 
@Provides 
Retrofit providesRetrofit(OkHttpClient client){ 
    return new Retrofit.Builder() 
        .baseUrl(baseUrl) 
        .client(client) 
        .build(); 
} 

Puis dans votre classe:

public class MyClass { 
    Retrofit mRetrofit; 

    @Inject 
    public MyClass(Retrofit retrofit){ 
     mRetrofit = retrofit; 
    } 
} 
+0

Cela ne marchera pas dans mon cas car l'Authenticator est créé lorsque le okHttpClient est instancié, donc l'injection de l'instance retrofit doit être Lazy. Même si j'injecte l'instance retrofit dans mon authentificateur même avec "Lazy" c'est toujours nul. – Dadoufi