Я полагаю, WebApi.ReadingsList
- это функция без приостановки. Это означает, что вам нужно будет заставить поток ждать, пока он работает. Вы, вероятно, не хотите использовать Dispatchers.Main
для этого, так как это запустит его в потоке пользовательского интерфейса. Dispatchers.IO
будет нормальным выбором.
Вы также действительно не должны звонить suspendCoroutine
для этого. Это предназначено для низкоуровневого взаимодействия с другими видами асинхронных обратных вызовов, которых у вас нет в этом случае. Что-то вроде этого было бы более подходящим:
suspend fun retrieveData(
first: Date,
last: Date,
): ArrayList<Readings>? {
val resp2 = withContext(Dispatchers.IO) {
WebApi.ReadingsList(activity,auth_token, first, last)
}
if (resp2?.status == "Success") {
return resp2?.organization_sensor_readings
}
return null
}
Это запустит блокирующий вызов в подчиненном задании в потоке ввода-вывода. Это гарантирует, что если ваша сопрограмма будет отменена, то подчиненное задание также будет отменено - хотя это не прервет блокирующий вызов.