HTTP GET запрос в котлине - PullRequest
0 голосов
/ 05 июля 2018

Мне нужен пример HTTP-запроса GET в kotlin. У меня есть база данных, и я уже сделал API для получения информации на сервер. В качестве окончательного результата мне нужно представить API json в макете Android внутри 'editText'. предложения? У меня уже есть этот код:

fun fetchJson(){

    val url = "http://localhost:8080/matematica3/naoAutomatica/get"

    val request = Request.Builder().url(url).build()

    val client = OkHttpClient()

    client.newCall(request).enqueue(object : Callback {

        override fun onResponse(call: Call?, response: Response?) {
            val body = response?.body()?.string()
            println(body)
        }

        override fun onFailure(call: Call?, e: IOException?) {
            println("Falhou")
        }

    }

}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы можете использовать библиотеку kohttp . Это HTTP-клиент Kotlin DSL. Он поддерживает функции square.okhttp и предоставляет им понятный DSL. Асинхронные вызовы KoHttp приводятся в действие сопрограммами.

val response: Deferred<Response> = "http://localhost:8080/matematica3/naoAutomatica/get".asyncHttpGet()

или функция DSL для более сложных запросов

val response: Response = httpGet {
    host = "localhost"
    port = 8080
    path = "/matematica3/naoAutomatica/get"
}

Более подробную информацию вы можете найти в документах

В результате ваш вызов с обратными вызовами будет выглядеть так:

val response: Deferred<Response> = "http://localhost:8080/matematica3/naoAutomatica/get".asyncHttpGet()

try {
    response.await().use {
        println(it.asString())
    }
} catche (e: Exception) {
    println("${e?.message}")
}

Чтобы получить его с помощью Gradle

compile 'io.github.rybalkinsd:kohttp:0.10.0'
0 голосов
/ 05 июля 2018

Создайте переменную-член EditText, чтобы вы могли затем обращаться к ней в функциях обратного вызова

например.

var editText: EditText? = null

инициализируйте это в onCreate вашей деятельности

editText = findViewById<EditText>(R.id.editText)

заданный текст в вашем обратном звонке, вот так

client.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call?, e: IOException?) {
        println("${e?.message}")
    }

    override fun onResponse(call: Call?, response: Response?) {
        val body = response?.body()?.string()
        println(body)

        editText?.text = "${body.toString()}" \\ or whatever else you wanna set on the edit text
    }
})
...