Android Ktor 网络请求框架

news2025/1/18 9:54:16

Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架,旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言,Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码,特别适合那些已经熟悉 Kotlin 的开发人员。

Ktor 的设计非常灵活和模块化,允许开发者按需加载不同的功能模块,如路由、认证、会话管理和 WebSocket 支持。这种设计不仅使应用程序保持轻量和高效,还避免了不必要的依赖。在处理并发请求方面,Ktor 利用 Kotlin 的协程机制,能够高效地进行异步处理,从而提高应用的性能和响应速度。

Ktor 是完全用 Kotlin 编写和设计的,整个配置和使用都是原生的 Kotlin 风格,这使得 Kotlin 开发者们可以更自然和简洁地进行代码编写。而 Retrofit 虽然可以与 Kotlin 很好地集成,但本质上还是 Java 风格的库,某些地方可能显得冗长。


以 Android 端举例,依赖配置: 

    implementation ("io.ktor:ktor-client-core:2.0.0") // 核心库
    implementation ("io.ktor:ktor-client-cio:2.0.0") // CIO引擎

关于 CIO 引擎:
在 Ktor 中,CIO (Coroutine-based IO) 引擎是一个处理 HTTP 请求的引擎。它的特点是基于 Kotlin 的协程来进行异步 IO 操作,这使得它在处理高并发请求时更高效,更能节省资源


以 get 请求为例:

    private suspend fun xxx() {
        val url = "https://www.xxxxx.com"

        val client = HttpClient(CIO)
        val response: HttpResponse = client.get(url) {
            url { // 域名添加参数
                parameters.append("param1", "value1")
                parameters.append("param2", "value2")
            }
            headers { // 添加请求头
                append("Custom-Header", "HeaderValue")
            }
            setBody() // 添加请求体
        }.body()

        val responseCode = response.status.value  // 响应码
        val responseBody = response.bodyAsText()  // 响应体
    }

首先创建一个 HttpClient(在 IDE 中,默认会给 HttpClient 字体标上深紫色,可见牌面十足)

之后的 get、post、put、patch、表单提交等请求都会调用这个实例来完成


以请求百度主页为例:

class MainActivity : AppCompatActivity() {
    private val client = HttpClient(CIO)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<Button>(R.id.button).setOnClickListener {
            lifecycleScope.launch {
                netWorkRequest("https://www.baidu.com/")
            }
        }
    }

    private suspend fun netWorkRequest(url: String) {
        val response: HttpResponse = client.get(url).body()
        Log.e("wk", "code: ${response.status.value}")
        Log.i("wk", "body: ${response.bodyAsText()}")
    }
}

Ktor 的日志添加也很简单:

    implementation ("io.ktor:ktor-client-logging:2.0.0")

然后在创建初始化 HttpClient 的时候配置一下即可

    private val client = HttpClient(CIO) {
        install(Logging) {
            logger = object : Logger {
                override fun log(message: String) {
                    Log.d("KtorLogger", message)
                }
            }
            level = LogLevel.ALL
        }
    }

Ktor 除了能用于 Android 端外,还能用在跨平台(Kotlin Multiplatform),这意味着可以在多个平台(例如 Android、iOS、JVM、JS 等)上共享相同的业务逻辑和网络代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1712488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用Firebase Hosting来托管网站

文章目录 如何利用Firebase Hosting来托管网站前提条件详细步骤1. 安装 Firebase CLI2. 登录 Firebase3. 初始化 Firebase 项目4. 准备网站文件5. 部署到 Firebase6. 配置自定义域名&#xff08;可选&#xff09; 常见问题 如何利用Firebase Hosting来托管网站 以下是更详细的…

【领导力SE模型影响地图】如何分辨一个管理者有没有好的领导力? ​

影响地图是以思维导图的形式&#xff0c;在业务目标和交付物之间建立起强关联。 影响地图分为四个层级&#xff1a; 第1层级&#xff1a;目标&#xff08;Why&#xff09;- 想要达成的业务目标。 第2层级&#xff1a;利益相关者&#xff08;Who&#xff09;- 谁能够帮助达成…

基础8 探索JAVA图形编程桌面:邮件操作组件详解

在一个静谧的午后&#xff0c;卧龙和凤雏相邀来到一家古朴典雅的茶馆。茶馆内环境清幽&#xff0c;袅袅的茶香与悠扬的古筝声交织在一起&#xff0c;营造出一种宁静而祥和的氛围。 卧龙和凤雏坐在茶馆的一角&#xff0c;面前的桌子上摆放着一套精致的茶具。茶香四溢&#xff0c…

重构2:重构的原则

最近在看重构2&#xff1a;改善既有代码的设计这本书&#xff0c;对于代码重构指导非常有帮助&#xff0c;然后也是做个笔记记录下&#xff0c;以下是我阅读本书的前两章的时候整理的思维导图&#xff1a;

Leetcode3165. 不包含相邻元素的子序列的最大和(Go中的线段树分治包含多类数据使用maintain进行维护)

题目截图 题目分析 不能取相邻的&#xff0c;就是打家劫舍 然后更改某一个值就是单点更新 更新后&#xff0c;需要更新区间的值 需要注意的是&#xff0c;使用分治时需要考虑到一头一尾的问题&#xff0c;所以有4种情况&#xff08;选or不选在两个位置&#xff09; 这四种情况…

【机器学习系列】掌握随机森林:从基础原理到参数优化的全面指南

目录 目录 一、随机森林简介 (一)随机森林模型的基本原理如下&#xff1a; (二)随机森林模型的优点包括&#xff1a; (三)森林中的树的生成规则如下&#xff1a; (四)在随机森林中&#xff0c;每棵树都使用不同的训练集进行训练&#xff0c;原因如下 随机森林的分类性能&…

【Linux进程篇】Linux内核——程序地址空间的初构

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 程序地址空间回顾 我们在讲C语言的时候&#xff0c;大家应该都见过这样的空间布局图&#xff1a; 为了更好的验证不同的数据在内存中的存储位置&#xff0c;下面这段代码我们可以去实验一下&#xff1a; #include<…

眼精星和金鸣识别新增智能结构化识别,助您快速筛选和统计数据

熟悉眼精星票证识别系统或金鸣表格文字识别大师的用户都知道&#xff0c;近日&#xff0c;这二款软件同时上线了“智能结构化”功能&#xff0c;那么&#xff0c;什么是智能结构化呢&#xff1f; 准确地说&#xff0c;我们这里的智能结构化应为OCR智能结构化&#xff0c;因为它…

Docker Hub 国内镜像源配置

Docker Hub 国内镜像源配置 Docker Hub 国内镜像源是指在国内境内提供 Docker 镜像服务的镜像源。由于国际网络带宽等问题&#xff0c;国内用户下载 Docker 镜像通常速度较慢。因此&#xff0c;为了解决这个问题&#xff0c;一些国内的公司和组织提供了 Docker 镜像的国内镜像…

Java核心: 使用instrumentation

在上一篇Java核心: 注解处理器我们提到&#xff0c;通过实现AbstractProcessor&#xff0c;并调用javac -processor能够生成代码来实现特殊逻辑。不过它存在两个明显的问题: 只能新增源文件来扩展逻辑&#xff0c;无法修改现有的类或方法必须有一个单独的编译过程&#xff0c;…

【stm32/CubeMX、HAL库】嵌入式实验六:定时器(1)|定时器中断

参考&#xff1a; 【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p13&share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3 《嵌入式系统基础与实践》刘黎明等编著&#xff0c;第九章定时器。 实验内容…

【VRIO模型】用战略模型找到你的「核心竞争力」

一个项目或企业要获得成功&#xff0c;其所拥有的资源和资源发挥的效能至关重要。那么&#xff0c;什么样的资源才能支撑项目发展的核心竞争力呢&#xff1f;VRIO是针对组织内部资源与能力&#xff0c;分析竞争优势和弱点的工具。 VRIO模型 VRIO模型是针对企业内部资源与能力…

LeetCode刷题之HOT100之三数之和

2024/5/29 天气真他妈好呀&#xff01;好天气让我舒畅&#xff0c;可惜俺今天把我养护了两三个月的栀子花花苞又整掉了一朵&#xff0c;呜呜呜&#xff01;看着它们一天天长大&#xff0c;花苞边由嫩绿泛白&#xff0c;结果被我不小心弄掉了&#xff0c;我是罪人。它们还想&…

SunoAI 智能创作歌曲神器的源码系统架构 前后端分离 附带完整的源代码包以及安装搭建教程

系统概述 SunoAI 智能创作歌曲神器的源码架构是基于先进的技术理念构建而成。前端采用了现代化的用户界面设计&#xff0c;为用户提供直观、友好的操作环境。后端则运用高效的算法和强大的处理能力&#xff0c;确保歌曲创作的准确性和高质量。 代码示例 系统特色功能模块 1.智…

Vue3 - 实现一个雨水滴落的动画效果

在 Vue 3 中实现一个雨水滴落的动画效果,可以使用 HTML5 的 <canvas> 元素和 JavaScript 来绘制和控制动画。 以下是一个实现雨水滴落效果的示例: 创建一个 Vue 3 项目 首先,确保你已经创建了一个 Vue 3 项目。如果还没有,可以使用 Vue CLI 来创建: vue create r…

如果不花钱,又担心钱存着贬值,怎么办?如果把大部分钱投入到赚钱的事上,特别是自己专业上,比如说我是十年的程序员,帮我分析投资?

如果你不想花钱&#xff0c;但又担心钱存着会贬值&#xff0c;有几个策略可以帮助你在不花费大量金钱的情况下保护你的资金价值&#xff1a; 高收益储蓄账户或货币市场账户&#xff1a; 选择一个高收益的储蓄账户或货币市场账户&#xff0c;这些账户通常比传统储蓄账户提供更高…

[ACL 2024 Main] StickerConv: 从零开始的多模态共情回复生成

文章目录 &#x1f4c3; Abstract&#x1f52d; Contributions&#x1f50d; Approach✨ Agent for StickerConv✨ StickerConv Dataset✨ PEGS✨ 多模态共情回复评价 &#x1f4ca; Experiments&#x1f4c4; Conclusion&#x1f310; 开源网址 Project Page: StickerConv Pro…

【云原生】kubernetes中Configmap原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

汽车IVI中控开发入门及进阶(二十一):DAB和FM 收音机

前言: 在过去的十年里,数字收音机对车载娱乐产生了重大影响。现在,几乎每辆新车都标配了这项技术,这也是我们60%以上的人收听收音机的方式。甚至有传言称,在不久的将来,将永久关闭调频发射机,使许多车载收音机过时。但一些相对年轻的汽车在工厂里仍然没有安装DAB,而且…

Linux共享内存创建和删除

最近项目中使用到了共享内存记录下 创建共享内存: 删除共享内存: 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <u…