При использовании Retrofit запрос будет выполняться асинхронно.Это означает, что до того, как он получит возможность завершить запрос, функция dataEmployee
вернет неинициализированный pos
.
. Есть несколько способов сделать это, но самый простой - распространить обратный вызов.,Допустим, вы определяете функцию как:
fun dataEmployee(name: String, numEmp: String, callback: (ConsultMovResponse?) -> Unit)
Последний аргумент - это функция, которая должна вызываться при вызове onResponse
.Что-то вроде:
override fun onResponse(call: Call<ConsultMovResponse>, response: Response<ConsultMovResponse>) {
callback(response?.body())
}
Способ, которым вы можете вызвать метод сейчас, будет:
dataEmployee("Foo", "1234") {
// Use the implicit parameter `it` which will be the response
}
Редактировать Для ошибки вы можете следовать аналогичному процессу.Давайте изменим dataEmployee
на:
fun dataEmployee(name: String, numEmp: String, onSuccess (ConsultMovResponse?) -> Unit, onFailure: (Throwable) -> Unit)
В случае неудачи вы можете позвонить:
override fun onFailure(call: Call<ConsultMovResponse>, throwable: Throwable) {
onFailure(throwable)
}
Теперь вы звоните dataEmployee
следующим образом:
dataEmployee("foo", "1234",
onSuccess = { /*handle success*/ },
onFailure = { /*`it` will be the error */ })