【发布时间】:2021-11-17 20:36:13
【问题描述】:
我正在尝试使用 Hilt 重构我的第一个(编写不佳的)项目。 不幸的是,在我看过的所有教程中,没有人涵盖这个非常基本的案例:提供用户名和密码以改进基本身份验证。
我已经设置了网络模块,但是编译器正确地抱怨“provideRetrofitClient”函数的“无法注入字符串参数”。我想从视图模型传递的参数
视图模型:
@HiltViewModel
class AuthenticationViewModel
@Inject
constructor(
private val apiService: ApiService
) : ViewModel() {
performLogin(username:String,password:String){
viewModelScope.launch {
//how can I pass credentials to apiService?
apiService.login()
}
}
网络模块:
Module
@InstallIn(SingletonComponent::class)
object NetworkModule {
@Singleton
@Provides
fun provideGsonBuilder(): Gson = GsonBuilder().setLenient().create()
@Singleton
@Provides
fun provideRetrofitClient(username: String, password: String): OkHttpClient {
return OkHttpClient.Builder()
//this intercemptor allowed credentials set up in the original app
//.addInterceptor(BasicAuthInterceptor(username, password))
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build()
}
@Singleton
@Provides
fun provideRetrofitBuilder(gsonBuilder: Gson, client: OkHttpClient): Retrofit.Builder {
return Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gsonBuilder))
.client(client)
}
@Singleton
@Provides
fun provideApiService(retrofitBuilder: Retrofit.Builder): ApiService {
return retrofitBuilder
.build()
.create(ApiService::class.java)
}
如何在运行时使用凭据“配置”注入的改造客户端?
【问题讨论】:
标签: android kotlin retrofit dagger-hilt