当前位置: 首页 > news >正文

android—ktor-client封装使用,请求网络

ktor-client封装使用步骤:

1.导入依赖:

设置版本号:

buildscript {ext.ktor_version = '2.3.1'
}

添加依赖:

    implementation "io.ktor:ktor-client-okhttp:$ktor_version"implementation "io.ktor:ktor-client-auth:$ktor_version"implementation "io.ktor:ktor-client-core:$ktor_version"implementation "io.ktor:ktor-client-logging:$ktor_version"implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")implementation("io.ktor:ktor-client-cio:$ktor_version")implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")

2.封装网络工具类:

class HttpUtils {var baseUrl = "https://test.demo.cn"val httpClient = HttpClient(OkHttp) {install(ContentNegotiation) {json(Json {prettyPrint = trueisLenient = true})}install(HttpTimeout) {requestTimeoutMillis = 5000connectTimeoutMillis = 5000}install(DefaultRequest) {url { baseUrl }}}fun close() {httpClient.close()}inline fun <reified T> get(url: String, params: Map<String, String> = emptyMap()): Flow<T> {return flow {val response = httpClient.get(url) {params.forEach { parameter(it.key, it.value) }}val result = response.body<T>()emit(result)}.catch { throwable: Throwable ->throw throwable}.onCompletion { cause ->close()}.flowOn(Dispatchers.IO)}inline fun <reified T> post(url: String, params: Map<String, String> = emptyMap()): Flow<T> {return flow {val response = httpClient.post(url) {params.forEach { parameter(it.key, it.value) }}val result = response.body<T>()emit(result)}.catch { throwable: Throwable ->throw throwable}.onCompletion { cause ->close()}.flowOn(Dispatchers.IO)}}

3.进行请求:

 private suspend fun testHttpClint(){HttpUtils().get<BaseResponse>("", mapOf("id" to "1")).collect{it.flag}}

PS: 网络请求需要放在协程里面使用

http://www.lryc.cn/news/117105.html

相关文章:

  • GD32F103VE侵入事件
  • 将tp5项目、fastadmin项目部署到服务器宝塔面板
  • Jenkins+Docker+SpringCloud微服务持续集成
  • 系统架构设计师-系统可靠性分析与设计
  • Linux(CentOS7)搭建达梦数据库
  • [杂谈]-国产MCU竞争力浅析
  • 4.1、Flink任务怎样读取集合中的数据
  • JD商品详情页面+关键词搜索商品列表API接口数据,详情页面数据返回值说明
  • Electron v26.0.0-beta.11 发布,跨平台桌面应用开发工具
  • 提高办案效率:公检系统引入自动校对技术
  • iptables 清空
  • 网络安全(黑客)零基础入门
  • Al Go: 蒙特卡洛树搜索(MCTS)简介
  • Client-go操作Deployment
  • 设计模式——单例模式(懒汉和饿汉)
  • 详解——Vue3递归函数功能
  • 【VSCode】查看二进制文件
  • C#设计模式之观察者模式
  • 小红书攻略:爆款引流,如何在激烈竞争中脱颖而出?
  • Ubuntu中的安装卸载及删除方法
  • 获取历史dokcer镜像项目,并上传gitlab,再打包镜像管理
  • 【Go语言】Golang保姆级入门教程 Go初学者chapter3
  • 网络防御(4)
  • conda错误处理:ResolvePackageNotFound
  • linux初学者小命令
  • 宝尊电商短期前景堪忧,宝尊国际能否取得成功还有待验证
  • 百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5
  • Redis的常用数据结构
  • 深入JVM - JIT分层编译技术与日志详解
  • 临时文档2