私はこのネットワークモジュールを持っています。 ErrorUtilsの静的メソッドにネットワークモジュールを挿入したい。
@Module
public class NetworkModule {
private final String END_POINT = "https://www.myurl.com/";
@Provides
@Singleton
public OkHttpClient getOkHttpClient() {
OkHttpClient okHttpClient = builder.build();
return okHttpClient;
}
@Provides
@Singleton
public GsonConverterFactory getGsonConverterFactory() {
return GsonConverterFactory.create();
}
@Provides
@Singleton
public Retrofit getRetrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) {
return new Retrofit.Builder()
.baseUrl(END_POINT)
.client(okHttpClient)
.addConverterFactory(gsonConverterFactory)
.build();
}
@Provides
@Singleton
public RetrofitService getRetrofitService(Retrofit retrofit) {
return retrofit.create(RetrofitService.class);
}
そして、私はこのモジュールを静的メソッドに注入したい:
public class ErrorUtils {
@Inject
static Retrofit retrofit;
public static RestError parseError(Response<?> response) {
**//showing error while writing this line**
MyApplication.getComponent().inject(ErrorUtils.class);
Converter<ResponseBody, RestError> converter = retrofit.responseBodyConverter(RestError.class, new Annotation[0]);
RestError error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new RestError();
}
return error;
}
}
どのようにして静的メソッドにモジュールを注入できますか?
Dagger 1 からの移行でわかるように
ダガー2は、スタティックインジェクションをサポートしていません。
静的なメソッドと変数は、一般的に悪い考えです。あなたの場合、ErrorUtils
をオブジェクトにすることができます。 @Singleton
スコープ。次に、静的呼び出しを使用せずに、サービスを適切に注入し、errorUtils
を適切に注入することができます。
それが選択肢でない場合は、コンポーネントにゲッターを提供するだけです
@Component interface MyComponent {
Retrofit getRetrofit();
}
次に、そのメソッドを使用して静的変数を設定します。