Web Services Kotlin中的HTTP GET请求

wa7juj8i  于 2022-11-24  发布在  Kotlin
关注(0)|答案(2)|浏览(272)

我需要一个Kotlin中HTTP GET请求的例子。我有一个数据库,我已经做了API来获取信息到服务器。作为最后的结果,我需要在android布局中的一个'editText'中呈现API json。建议?我已经有了以下代码:

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")
        }
    }
}
yh2wf1be

yh2wf1be1#

创建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
    }
})
huus2vyu

huus2vyu2#

你可以使用kohttp库。它是一个KotlinDSL HTTP客户端。它支持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"
}

您可以在docs中找到更多详细信息
因此,使用“callbacks”的调用将如下所示

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'

相关问题