Я пытаюсь вызвать API, и когда мои переменные будут готовы, обновите компоненты пользовательского интерфейса соответственно.
Это мой сетевой синглтон, который запускает сопрограмму:
object MapNetwork {
fun getRoute(request: RoutesRequest,
success: ((response: RoutesResponse) -> Unit)?,
fail: ((throwable: Throwable) -> Unit)? = null) {
val call = ApiClient.getInterface().getRoute(request.getURL())
GlobalScope.launch(Dispatchers.Default, CoroutineStart.DEFAULT, null, {
try {
success?.invoke(call.await())
} catch (t: Throwable) {
fail?.invoke(t)
}
})
}
}
И так я это называю:
network.getRoute(request,
success = {
// Make Some UI updates
},
fail = {
// handle the exception
})
И я получаю исключение, в котором говорится, что нельзя обновить пользовательский интерфейс из любого потока, кроме потока пользовательского интерфейса:
com.google.maps.api.android.lib6.common.apiexception.c: Not on the main thread
Я уже пробовал это решение, но resume
в Continuation<T>
классе" устарело ", начиная с Kotlin 1.3
resume
не устарел, это просто развлечение. - person Marko Topolnik   schedule 05.11.2018