kotlin的协程在网络请求方面的应用

简介: GET代表希望从服务器那里获取数据,POST则代表向服务器提交数据

一、利用Http访问网络

GET代表希望从服务器那里获取数据

POST则代表向服务器提交数据

网络请求一般在子线程中执行,不然可能会阻塞主线程导致界面卡死

利用okHttp开源库进行简化原生的HttpURLConnection

二、解析网络上常见的两种数据

这里面测试可以用自己的云服务器也可以用apache或者nginx搭建本地服务器,不过原理都是一样的

1.xml格式

Pull解析和Sax解析,这里不打算贴源码,太长了,但理解起来不算太难,要注意以下的一个点

从Android9.0开始,不允许http明文传输数据,必须使用https传输,所以,测试没有https的话,可以添加

以下内容去配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted = "true">
        <trust-anchors>
            <certificates src = "system"/>
        </trust-anchors>
    </base-config>
</network-security-config>

最后还要再AndroidManifest上添加配置文件

android:networkSecurityConfig = "@xml/network_config">

2.json格式

可以使用官方原生的JSONObject与JSONAarry进行解析数据

[{"id":20,"name":"dd"},{"id":30,"name":"ddl"}]
[]代表一个JSONAarry
{}代表一个JSONObject
//JSONObject对象中的具体的字段需要用get等方法进行提取数据

最后google官方提供了一个面向对象的解析方法,GSON库,使得我们可以利用面向对象的方法轻松提取数据

//解析单个JSONObject{"id":20,"name":"dd"}
//字段相当于一个javabean类似的做法转化成类
//例如
class Person(val name:String,val id:Int)
//然后调用
val gson = Gson()
val person = gson.fromJson(jsonData,Person::class.java)
//然后这里的person就是一个person对象

//解析数组相对麻烦一点,不过也挺简单的
val typeOf = object:TypeToken<List<Person>>(){}.type
val people = gson.fromJson<List<Person>>(jsonData,typeOf)
//这里的people是一个list对象

最后这里提及一下回调操作,主要是为了简化网络请求的方式,抽象出一些重复性操作,使得代码更加简洁

三、Retrofit的使用

允许我们将接口分类使得代码的架构更加合理,有指定根路径使得我们只需要利用相对路径即可发起请求

这里举一些处理复杂接口的一些例子

//最简单的获取数据的一个接口文件,静态
//GET https://ex.com/get_data.json
@GET("get_data.json")
fun getAppData(): Call<List<App>>

//数据前面有可变参数,采用占位符,然后再指定类型
//GET https://ex.com/<page>/get_data.json
@GET("{page}/get_data.json")
fun getAppData(@Path("page")page:Int):Call<List<App>>

//服务器要求传入一些参数
//GET https://ex.com/get_data.json ?u = <user> & t = <token>
@GET("get_data.json")
fun getData(@Query("u") user:String,@Query("t") token:String):Call<List<App>>

//要求删除数据
//DELETE https://ex.com/data/<id>
@DELETE("data/{id}")
fun deleteData(@Path("id")id :String):Call<ResponseBody>

//提交数据
//POST https://ex.com/data/create
@POST("data/create")
fun createData(@Body data:App):Call<ResponseBody>

//请求header中的指定参数
//GET https://ex.com/get_data.json User-Agent:okhttp Cache-Control:max-age = 0 
    //静态
@Headers("User-Agent:okhttp","Cache-Control:max-age = 0")
@GET("get_data.json")
fun getData():Call<List<App>>
    //动态
@GET("get_data.json")
fun getData(@Header("User-Agent") userAgent:String,@Header("Cache-Control") cacheControl:String):Call<List<App>>

四:Kotlin:协程

用于解决高并发的一个新的方案,协程和线程有点像,不过协程是在代码层面实现的线程,故拥有更加良好的性能,以下解释几个名词

能力有限归纳不了太多

并发:即同一时间大量操作,宏观表现为并行,比如淘宝秒杀的时候,大家鼠标点击秒杀的时候就是并行,如果只是单纯的开启线程实现并行的话,可能会直接奔溃,kotlin这里提供了一个更加轻量的协程就是解决此问题

顶层协程:应用结束,协程也随之结束

协程作用域:顾名思义就是在里面的代码可以执行协程操作

挂起:就是不执行操作的意思

总之协程的出现大大降低处理并发编程的难度,不过由于初学没来得及应用,只能理解这些理论层面的

目录
相关文章
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
4月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
212 6
|
8月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
869 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
7月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
3月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
424 11
|
8月前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
391 0
中国联通网络资源湖仓一体应用实践
|
10月前
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
418 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
4月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
302 0
|
4月前
|
安全 Linux
利用Libevent在CentOS 7上打造异步网络应用
总结以上步骤,您可以在CentOS 7系统上,使用Libevent有效地构建和运行异步网络应用。通过采取正确的架构和代码设计策略,能保证网络应用的高效性和稳定性。
154 0
|
7月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
257 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析

热门文章

最新文章