gpt4 book ai didi

android - Android 中使用 Kotlin 的简单 HTTP 请求示例

转载 作者:行者123 更新时间:2023-12-02 13:10:37 25 4
gpt4 key购买 nike

我是使用 Kotlin 进行 Android 开发的新手,我正在努力寻找有关如何使用当前最佳实践创建简单 GET 和 POST 请求的任何有用文档。我来自 Angular 开发,我们使用 RxJS 进行响应式开发。
通常我会创建一个服务文件来保存我所有的请求函数,然后我会在任何组件中使用这个服务并订阅 observable。
您将如何在 Android 中执行此操作?是否有一个很好的例子来说明必须创建的东西。乍一看,一切看起来都如此复杂和过度设计

最佳答案

建议你使用OkHttp的官方推荐,或 Fuel 库更容易,它还具有使用流行的 Json/ProtoBuf 库将响应反序列化为对象的绑定(bind)。
燃料 例子:

// Coroutines way:
// both are equivalent
val (request, response, result) = Fuel.get("https://httpbin.org/ip").awaitStringResponseResult()
val (request, response, result) = "https://httpbin.org/ip".httpGet().awaitStringResponseResult()

// process the response further:
result.fold(
{ data -> println(data) /* "{"origin":"127.0.0.1"}" */ },
{ error -> println("An error of type ${error.exception} happened: ${error.message}") }
)

// Or coroutines way + no callback style:
try {
println(Fuel.get("https://httpbin.org/ip").awaitString()) // "{"origin":"127.0.0.1"}"
} catch(exception: Exception) {
println("A network request exception was thrown: ${exception.message}")
}

// Or non-coroutine way / callback style:
val httpAsync = "https://httpbin.org/get"
.httpGet()
.responseString { request, response, result ->
when (result) {
is Result.Failure -> {
val ex = result.getException()
println(ex)
}
is Result.Success -> {
val data = result.get()
println(data)
}
}
}

httpAsync.join()
okhttp 例子:
val request = Request.Builder()
.url("http://publicobject.com/helloworld.txt")
.build()

// Coroutines not supported directly, use the basic Callback way:
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}

override fun onResponse(call: Call, response: Response) {
response.use {
if (!response.isSuccessful) throw IOException("Unexpected code $response")

for ((name, value) in response.headers) {
println("$name: $value")
}

println(response.body!!.string())
}
}
})

关于android - Android 中使用 Kotlin 的简单 HTTP 请求示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63777591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com