Оберните вызов с помощью withContext
и пометьте функцию как приостановленную
suspend insertTask(task: Task) = withContext(Dispatchers.IO) { appDao.insertTask(task) }
И, на ваш взгляд:
fun saveTask(t: Task) = lifecycleScope.launch {
val id = viewModel.insertTask(t)
Toast.makeText(context, "Task $id has been inserted, Toast.LENGTH_SHORT).show()
}
Вы также можете вернуть LiveData
, который вызывает обратный вызов, когда это сделано:
fun insertTask(task: Task): LiveData<Long> {
val liveData = MutableLiveData<Long>()
viewModelScope.launch {
liveData.value = dao.insertTask(task)
}
return liveData
}
Дальнейшие рекомендации
Не сохраняйте ссылку на контекст в вашей модели представления. Если вам нужен контекст, используйте AndroidViewModel
и AndroidViewModel#getApplication()