У меня есть три функции, которые я хочу запустить последовательно с использованием сопрограмм.
private fun showAnimation() {
busy = true
mLog.i(TAG, "showing")
activity?.runOnUiThread {
button.text = ""
batchAnimation.visibility = View.VISIBLE
batchAnimation.playAnimation()
}
}
private fun hideAnimations(b: Boolean) {
busy = false
mLog.i(TAG, "hiding : $b ")
activity?.runOnUiThread {
button.text = "give feedback"
batchAnimation.visibility = View.GONE
batchAnimation.cancelAnimation()
}
}
suspend fun getBatchData(): Boolean {
var a = false
// network call that makes the value true when the needed data is returned else a remains false
return a
}
Я вызываю их следующим образом
CoroutineScope(IO).launch {
showAnimation()
val a = async { getBatchData() }
hideAnimations(a.await())
}
однако функция hideanimations вызывается без ожиданиязначение второй функции
edit: добавлена функция getBatch
suspend fun getBatchData(): Boolean {
var a = false
// showAnimation()
launch {
context?.let {
val dao = MDatabase(it).getUserDao()
val trainerID = dao.getTrainerID()
mLog.i(TAG, "trainer id $trainerID")
json.put("trainer_id", trainerID)
NetworkOps.post(
Urls.batchUrl,
json.toString(),
context,
view!!.feedback,
object : response {
override fun onrespose(string: String?) {
mLog.i(TAG, "response $string")
val batches = Gson().fromJson(string, DCBatches::class.java)
if (batches.success == "1") {
val batchlist = batches.batches
if (batchlist.isNotEmpty()) {
mLog.i(TAG, "list length ${batchlist.size}")
launch {
context?.let { it ->
val dao1 = MDatabase(it).getBatchDao()
dao1.insertBatches(batchlist.toMutableList())
}
}
mLog.i(TAG, "inserted")
batchListSpinner.clear()
batchListSpinner.addAll(batchlist)
activity?.runOnUiThread {
batchAdapter.notifyDataSetChanged()
// hideAnimations()
}
} else {
showToast("Error no batches found")
// hideAnimations()
}
mLog.i(TAG,"setting true")
a = true
} else {
mLog.i(TAG, "error")
failedBatch()
}
}
override fun onfailure() {
failedBatch()
}
}) { _, _, _ ->
}
}
}
mLog.i(TAG,"returning value")
return a
}
Я добавил два оператора журнала, один после задания a
как true и один, когда значение возвращается вконец. Я вижу, что функция возвращает логическое значение, не дожидаясь ответа API. Как я могу это исправить?? Как отправить логическое значение из обратного вызова