Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用dagger-hilt android将MyServiceInterceptor类添加到networkmodule?_Android_Kotlin_Retrofit_Dagger Hilt - Fatal编程技术网

如何使用dagger-hilt android将MyServiceInterceptor类添加到networkmodule?

如何使用dagger-hilt android将MyServiceInterceptor类添加到networkmodule?,android,kotlin,retrofit,dagger-hilt,Android,Kotlin,Retrofit,Dagger Hilt,我需要为不同的请求将MyServiceInterceptor类添加到我的hilt servicemodule中。 例如,我的登录请求不需要头授权,但我的其他请求需要承载令牌 我的问题是我如何添加这个?需要帮忙吗 我的网络模块 @Module @InstallIn(ApplicationComponent::class) object NetworkingModule { @Provides fun providesBaseUrl(): String { retu

我需要为不同的请求将MyServiceInterceptor类添加到我的hilt servicemodule中。 例如,我的登录请求不需要头授权,但我的其他请求需要承载令牌

我的问题是我如何添加这个?需要帮忙吗

我的网络模块

@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)

    }
}

您可以使用注释。

在使用刀柄或匕首之前,有不同的方法可以做到这一点。。你采用哪种方法?所以我可以考虑如何让刀柄在这方面帮助你(如果需要的话)。我从登录请求中获得令牌。其他所有请求都将使用此令牌。(承载令牌)不,不,我的意思是,如果您根本不使用依赖注入。。你将用哪种方法来解决这个问题。我在stackoverflow的某个地方读到,有一些解决方案不需要刀柄。。或者您正在询问如何使用改造解决此问题?您能否提供需要处理的两个请求对象的示例。同时,您可以检查dagger中的限定符。这不是用户要求的解决方案。
@Provides
fun providesLoggingInterceptor(): HttpLoggingInterceptor {
    return HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
}


@Provides
fun providesOkhttpInterceptor() : Interceptor{
    return  Interceptor { chain: Interceptor.Chain ->
        val original: Request = chain.request()
        val requestBuilder: Request.Builder = original.newBuilder()
            .addHeader("Accept", "Application/JSON")
        val request: Request = requestBuilder.build()
        chain.proceed(request)
    }
}


@Provides
fun providesOkHttpClient(
    loggingInterceptor: HttpLoggingInterceptor,
    interceptor: Interceptor
): OkHttpClient {
    return OkHttpClient.Builder()
        .addInterceptor(loggingInterceptor)
        .addInterceptor(interceptor)
        .callTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .build()
}