Как асинхронно вызывать HTTP Post API? - PullRequest
2 голосов
/ 18 марта 2019

У меня проблема с моим приложением для Android. Я довольно новичок в этом и у меня есть некоторые проблемы с поиском правильной документации для асинхронных. Я использую библиотеку Kohttp, чтобы помочь мне немного.

Дело в том, что вы не можете запустить это в главном потоке пользовательского интерфейса, поэтому я хочу сделать этот запрос асинхронным. Я не могу найти четкую ссылку в документации, и я действительно не знаю, как это сделать простым Kotlin.

Это то, что я придумал; в отдельном классе с именем LoginCall. Я пробовал другие ответы, но это не привело к успеху. Как я могу запустить это в новом потоке и по-прежнему использовать ответ?

    class LoginCall {
    fun callLoginRequest(a:String, b:String): Any {

        val response: Response = httpPost {
            host = "XXX"
            path = "XXX"

            param { }
            header { }

            body {
                form {
                    "email" to a
                    "password" to b
                }
            }
        }

        return response
    }
}

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Кроме того, вы можете создать проблему для реализации asyncHttpPost.

1 голос
/ 01 июля 2019

Поскольку kohttp 0.10.0, вы можете использовать асинхронные методы для таких случаев. Вы можете попробовать их.

Пример кода:

suspend fun callLoginRequest(a:String, b:String): Any {

    val response: Differed<Response> = httpPostAsync {
        host = "XXX"
        path = "XXX"

        param { }
        header { }

        body {
            form {
                "email" to a
                "password" to b
            }
        }
    }

    // for further usage in coroutines
    return response.await() 
}

И вызовите эту функцию из сопрограммы

1 голос
/ 19 марта 2019

Есть много способов добиться этого, если вы используете Android в качестве базовой платформы, вы можете использовать нативный компонент под названием AsyncTask хороший SO post о том, как его использовать.

Если вы хотите использовать kotlin как язык и предоставляемые им функции, вы можете попробовать использовать coroutines ref .

Лично я бы порекомендовал coroutines, это упрощает обработку исключений и ошибок, а также предотвращает ад обратного вызова.

вот пример того же кода в сопрограмме,

// global 
private val mainScope = CoroutineScope(Dispatchers.MAIN + SupervisorJob())

// inside a method 
mainScope.launch{
  withContext(Dispatchers.IO){
    // do your async task here, as you can see, you're doing this in an IO thread scope. 
  }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...