2017-10-17 1 views
1

セッションタイムアウトを処理するためにOkHttpオーセンティケータでRetrofitサービスを注入しようとするまで、ダガー2.11 AndroidInjectionを使用しています。ダガー2.11 OkHttpオーセンティケータで注入する

AndroidInjectionは、アクティビティ、フラグメント、サービス、ContentProviders、BroadcastReceicersの注入のみを許可します。

私の質問は、上記のリストにないクラスで新しいDagger AndroidInjectionを使用するにはどうすればよいですか?

+2

私は間違っていないよ場合は、あなたはなぜ@Injectを使うことができますかなぜAndroidInjectionを使う必要がありますか? – savepopulation

+0

[this](https://stackoverflow.com/questions/45075204/how-do-i-use-androidinjection-class-in-custom-views-or-other-android-classes/45195327#45195327)をご覧ください。 )。 – azizbekian

答えて

0

ただ、同じモジュールに、あなたがそのokhttpも提供し、レトロフィットを提供するために、注入を使用して、あなたのクラスに続いて換装によって

@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(); 
} 

を使用している:

public class MyClass { 
    Retrofit mRetrofit; 

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

私のケースでは、okHttpClientがインスタンス化されたときにオーセンティケータが作成されるので、レトロフィットインスタンスのインジェクションが遅れている必要があります。 たとえ私が "Lazy"であっても、私のオーセンティケータにレトロフィットインスタンスを挿入すると、常にnullになります。 – Dadoufi

関連する問題