【发布时间】:2021-10-15 20:21:15
【问题描述】:
我正在从 API 获取数据,我需要等到作业完成。因为 MutableLiveData。 当它工作 response.isSusccesful=false 时,它会变为 true。我如何等到 retrofit.getData() 完成。我尝试了运行阻塞,但这不是合适的方法。我尝试了 async{} 和 await() 但我也没有成功。
fun loadData():ArrayList<CryptoData> {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(CryptoAPI::class.java)
job = viewModelScope.launch {
withContext(Dispatchers.IO){
val response = retrofit.getData()
withContext(Dispatchers.Main){
if (response.isSuccessful){
response.body()?.let {
cryptoDatas = ArrayList(it)
currency.value = cryptoDatas
progressBarStatus.value = false
println(response.isSuccessful)
}
}
else{
println(response.isSuccessful)
}
}
}
}
return cryptoDatas
}
【问题讨论】:
-
您已经在使用
viewModel为什么不使用LiveData来观察结果。也不要为每个调用创建Retrofit实例,将其创建为 Singlton 并在其他任何地方使用它 -
我正在观察,但它在 2 秒后发生了变化。如果响应不成功,我需要设置错误值。但2秒后不成功,转为成功
标签: android api kotlin retrofit kotlin-coroutines