鸿蒙仓颉语言开发教程:网络请求和数据解析

鸿蒙仓颉语言开发教程:网络请求和数据解析现在我能理解华为方面不断的鼓励大家在网络上贡献自己的教程 没有教程 没有参考文献 仓颉购物应用的开发过程真是举步维艰 每一步都是摸着石头过河 不过希望通过幽蓝君的文章能让大家少走一些弯路

欢迎大家来到IT世界,在知识的湖畔探索吧!

现在我能理解华为方面不断的鼓励大家在网络上贡献自己的教程。没有教程,没有参考文献,仓颉购物应用的开发过程真是举步维艰,每一步都是摸着石头过河,不过希望通过幽蓝君的文章能让大家少走一些弯路。

今天就以购物应用的分类列表为例,分享在仓颉开发语言中如何进行网络请求,以及怎么把请求到的数据展示到应用上。

鸿蒙仓颉语言开发教程:网络请求和数据解析



欢迎大家来到IT世界,在知识的湖畔探索吧!

网络权限

网络权限在app开发中是一个默认规则,几乎在任何系统的app中进行网络请求之前都要获取网络权限,仓颉也不例外。

在仓颉语言中网络权限的请求依然是在module.json5文件中,在module目录下增加网络请求权限:

"requestPermissions": [{"name": "ohos.permission.INTERNET"},]

欢迎大家来到IT世界,在知识的湖畔探索吧!

网络请求

添加权限之后,你可以回到应用中进行请求,首先导入http模块:

欢迎大家来到IT世界,在知识的湖畔探索吧!import ohos.net.http.*

然后创建请求实例:

let httpRequest = createHttp()

通常我们还需要一些配置信息,比如请求方法什么的,在仓颉中这个参数类型是HttpRequestOptions,它里面有很多参数,我只介绍常见的几个:

method:请求方法

extraData:post方法时传递的内容

expectDataType:指定返回数据的类型

header:请求头

下面为大家展示一个完整的数据请求:

欢迎大家来到IT世界,在知识的湖畔探索吧!let url = "*/api/class.php" let httpRequest = createHttp() let option = HttpRequestOptions( method: RequestMethod.GET, expectDataType: HttpDataType.STRING, header: HashMap<String, String>([("content-type", "application/json")]) ) httpRequest.request(url, {err, resp => if (let Some(e) <- err) { CJTools.log('error:' + e.message) } if (let Some(r) <- resp) { CJTools.log(r.result.toString()) } //请求完成务必销毁实例 httpRequest.destroy() },options:option)

数据解析

看上面这段代码,从创建实例,配置参数到发起请求好像都能看懂,但是到了请求回调中幽蓝君是有一些懵圈的,像let Some(e) <- err这种代码我是看不懂一点,估计大家也有多人跟我一样。

现在为大家介绍一下Some是什么意思,它的意思是构造一个携带参数Option<T>的实例,表示有值。也就是说上弥漫两个if语句是在判断,第一个是判断如果err有值表示请求出错了。如果resp有值表示请求到了数据。

也就是说如果请求成功,Some(r)中的r就是我们请求到的数据。

现在的r应该是字符串类型,那如何把它转换成数组并且能够被组件遍历。

我先创建了一个和数据内容字段相同的结构体:

public class ClassItem{ private var id: String; private var classname: String; private var cover: String; public ClassItem(id:String, classname:String,cover:String){ this.id = id this.classname = classname this.cover = cover } public func getId():String{ return this.id } public func getClassname():String{ return this.classname } public func getCover():String{ return this.cover } }

然后为大家演示怎么把r转换成ClassItem组成的数组:

欢迎大家来到IT世界,在知识的湖畔探索吧!if (let Some(r) <- resp) { let str = r.result.toString() let jValue = JsonValue.fromStr(str) let jArray = jValue.asArray() for (i in 0..jArray.size()) { var model = DataModel.fromJson(jArray.get(i).getOrThrow().asObject()) var modelData = match (model) { case data: DataModelStruct => data case _ => throw Exception("this data is not DataModelStruct") } let item = ClassItem(String.deserialize(modelData.get('id')), String.deserialize(modelData.get('classname')), String.deserialize(modelData.get('cover'))) this.classList.append(item) } }

最后classList就是我们需要的数据,以上就是仓颉语言网络请求的相关内容。#HarmonyOS语言仓颉购物#

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/127597.html

(0)
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信