Обратный вызов функции Android Coroutine - PullRequest
0 голосов
/ 09 января 2019

Вот мое веселье в репозитории , который возвращает мне String Id из имени группы

@Suppress(“RedundantSuspendModifier”)
@WorkerThread
suspend fun fetchGroupId(groupName: String): String {
      return groupDao.fetchGroupId(groupName)
}

А это функция на ViewModel

fun getGroupId(groupName: String) = scope.launch(Dispatchers.IO) {
      groupId = repository.fetchGroupId(groupName)
}

Теперь я хочу, чтобы этот идентификатор группы был на стороне действия, что мне нужно делать?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы можете использовать обратный вызов, используя Функция высшего порядка в качестве параметра обратного вызова для предоставления данных обратно вызывающему методу, как показано ниже:

fun getGroupId(groupName: String, callback: (Int?) -> Unit) = scope.launch(Dispatchers.IO) {
    callback(repository.fetchGroupId(groupName))
}

Этот метод будет использоваться, как показано ниже в вашем Activity:

mViewModel.getGroupId("your group name here") { id ->
    // Here will be callback as group id
}
0 голосов
/ 09 января 2019

Вы можете использовать интерфейс, например: -

interface GroupIdViewContract{ fun returnId(groupId : String) }

в ViewModel

fun getGroupId(groupName: String) = scope.launch(Dispatchers.IO) {
groupId = repository.fetchGroupId(groupName)
viewContract?.returnId(groupId)
}

тогда вы можете реализовать этот интерфейс в своей деятельности и легко получить идентификатор этой группы в своей деятельности

...