Вы не можете привязать данные к функции suspend
, и ИМХО модель представления не должна в первую очередь представлять функцию suspend
. Я рекомендую:
Шаг # 1: Удалить ключевое слово suspend
из register()
Шаг # 2: Перепишите register()
, чтобы запустить ваш код в подходящей области сопрограмм, чтобы любые функции suspend
, которые он вызывает, обрабатывались правильно:
fun register() {
viewModelScope.launch(Dispatchers.Main) {
if (validateFields()) {
val result = SourceplusplusApiService.invoke().registerUser(username.value!!, email.value!!, password.value!!).await()
isRegistrationCompleted.value = getResultValue(result)
}
}
}
Здесь я использую опцию viewModelScope
, предоставленную androidx.lifecycle:lifecycle-viewmodel-ktx
версия 2.1.0-alpha01
и новее. Кроме того, управляйте своим собственным объемом сопрограмм. Dispatchers.Main
обеспечит доступ к любым результатам этой работы в главном потоке приложений Android.
Теперь ваше выражение привязки данных может ссылаться на register()
, в то время как у вас все еще есть сопрограмма для вызова нижестоящих suspend
функций.