我是Coroutines的新手,我到处都读过一些文档。我有一个基本问题,但无法解决。。。基本上,当用户单击“连接”按钮(简易)时,我正在呼叫服务器以检查身份验证。
身份验证存储库
@WorkerThread
suspend fun getAuthenticationToken(loginModel: LoginModel):TokenModel {
return webService.getAuthenticationToken(loginModel)
}
WebService
suspend fun getToken(loginModel: LoginModel): TokenModel {
val result = client.get<TokenModel>("https://app.com/rest/login") {
url {
parameters.append("login", loginModel.login)
parameters.append("password", loginModel.password)
}
}.data
client.close()
return result
}
我第一次得到正确的结果。
第二次单击按钮。
Exception: kotlinx.coroutines.JobCancellationException: Parent job is Completed;
编辑
好的,问题出在client.close()调用上。我正在使用Dagger2提供客户端,但是Ktor文档说该客户端需要在调用后关闭。我该怎么做,我的意思是每次都可以提供一个客户端吗?
像这样提供客户端
@Provides
internal fun provideKtorHttpClient(): HttpClient {
return HttpClient(Android) {
install(JsonFeature) {
serializer = KotlinxSerializer()
}
}
}
在网络服务中
@Provides
internal fun provideKWebService(client: HttpClient): KWebServices = KWebServices(client)
最后在仓库中
@Provides
internal fun provideAuthenticationRemoteDataSource(ws: KWebServices): AuthenticationRemoteDataSource = AuthenticationRemoteDataSourceImpl(ws)
如果可以的话,谢谢。