IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> day10:kotlin的协程已经安卓网络技术初步 -> 正文阅读

[移动开发]day10:kotlin的协程已经安卓网络技术初步

一、利用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这里提供了一个更加轻量的协程就是解决此问题

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

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

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

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:37:31  更:2021-08-01 14:38:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 3:13:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码