Как добавить класс MyServiceInterceptor в сетевой модуль с помощью андроида с кинжальной рукоятью?

Мне нужно добавить класс MyServiceInterceptor в мой сервисный модуль рукоятки для другого запроса. например, моему запросу на вход не требуется авторизация заголовка, но моему другому запросу нужен токен-носитель.

У меня вопрос, как я могу это добавить? Любая помощь, пожалуйста?

Мой сетевой модуль

@Module
@InstallIn(ApplicationComponent::class)
object NetworkingModule {

    @Provides
    fun providesBaseUrl(): String {
        return NetworkingConstants.BASE_URL
    }

    @Provides
    fun providesLoggingInterceptor(): HttpLoggingInterceptor {
        return HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
    }




    @Provides
    fun provideOkHttpClient(loggingInterceptor: HttpLoggingInterceptor): OkHttpClient {
        val okHttpClient = OkHttpClient().newBuilder()

        okHttpClient.callTimeout(40, TimeUnit.SECONDS)
        okHttpClient.connectTimeout(40, TimeUnit.SECONDS)
        okHttpClient.readTimeout(40, TimeUnit.SECONDS)
        okHttpClient.writeTimeout(40, TimeUnit.SECONDS)
        okHttpClient.addInterceptor(loggingInterceptor)
        okHttpClient.build()
        return okHttpClient.build()
    }



    @Provides
    fun provideConverterFactory(): Converter.Factory {
        return GsonConverterFactory.create()
    }

    @Provides
    fun provideRetrofitClient(okHttpClient: OkHttpClient, baseUrl: String, converterFactory: Converter.Factory): Retrofit {
        return Retrofit.Builder()
            .baseUrl(baseUrl)
            .client(okHttpClient)
            .addConverterFactory(converterFactory)
            .build()
    }

    @Provides
    fun provideRestApiService(retrofit: Retrofit): ApiService {
        return retrofit.create(ApiService::class.java)
    }
}

И MyServiceInterceptorClass

@Singleton
public class MyServiceInterceptor @Inject constructor(
    private val preferencesHelper: PreferencesHelper
) : Interceptor {

    @Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): Response {
        var newRequest: Request = chain.request()

        newRequest = newRequest.newBuilder()
            .addHeader(
                "AccessToken",
                preferencesHelper.getAccessTokenFromPreference()!!
            )
            .build()

        return chain.proceed(newRequest)

    }
}

person podgradle    schedule 01.09.2020    source источник
comment
Есть разные способы сделать это, прежде чем использовать Hilt или Dagger. Какому подходу вы придерживаетесь? Так что я могу придумать, как сделать так, чтобы рукоять помогала вам в этом (если вообще нужна).   -  person Ahmed Shendy    schedule 03.09.2020
comment
Я получаю токен из запроса на вход. И все остальные запросы будут использовать этот токен. (Токен-носитель)   -  person podgradle    schedule 03.09.2020
comment
Нет-нет, я имел в виду, если вы вообще не будете использовать Dependency Injection ... какой способ вы будете использовать для решения этой проблемы. Для этого есть решения без использования Hilt. Я читал где-то в stackoverflow .. Или вы спрашиваете, как решить эту проблему с помощью Retrofit?   -  person Ahmed Shendy    schedule 03.09.2020
comment
Можете ли вы привести пример двух объектов запроса, которые необходимо обработать. А пока вы можете узнать о квалификациях в кинжале.   -  person Raja Singla    schedule 08.09.2020


Ответы (2)


Вы можете использовать аннотацию @Qualifier.

person ZX C    schedule 28.09.2020

person    schedule
comment
Это не то решение, о котором просил пользователь. - person Cliff; 28.02.2021