Восстановить ответ моего сервиса в другом классе с помощью retrofit2 в kotlin - PullRequest
0 голосов
/ 02 июня 2019

Мне позвонили в мою службу с модернизацией, в которой я получил ответ, и мне нужно отправить его в другой класс.

Я пытался сохранить данные ответов в ContentValues ​​и отправить их с помощью функции, но это не работает.

fun dataEmployee(name: String, numEmp: String): ConsultMovResponse? {
    var cMov = PersonData(name, numEmp)
    var pos: ConsultMovResponse?
    RetrofitClient.instMov.consultMov(cMov).enqueue(object : Callback<ConsultMovResponse> {
        override fun onResponse(call: Call<ConsultMovResponse>, response: Response<ConsultMovResponse>) {
            pos = response?.body()
            //return response, this code does not work.
            return pos?

        }

        override fun onFailure(call: Call<ConsultMovResponse>, t: Throwable) {
            println("Error  : " + t.stackTrace.toString())
            println("Error  : " + t.message)
        }
    })
    return pos?
}

1 Ответ

0 голосов
/ 04 июня 2019

При использовании 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 */ })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...