【发布时间】:2020-12-20 19:16:02
【问题描述】:
我需要将 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)
}
}
【问题讨论】:
-
在使用 Hilt 或 Dagger 之前有不同的方法可以做到这一点。你遵循哪种方法?所以我可以考虑如何让刀柄在这方面帮助你(如果需要的话)。
-
我从登录请求中获取令牌。其他所有请求都将使用此令牌。(不记名令牌)
-
不不,我的意思是,如果你根本不使用依赖注入......你将使用哪种方式来解决这个问题。我在 stackoverflow 的某个地方读到了不需要 Hilt 的解决方案。或者你在问如何使用 Retrofit 来解决它?
-
能否提供需要处理的两个请求对象的示例。同时,您可以在 dagger 中查看 Qualifiers。
-
你找到解决办法了吗?
标签: android kotlin retrofit dagger-hilt