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

布局王
• 阅读 3

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

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

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

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

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

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

网络请求

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

import ohos.net.http.* 然后创建请求实例:

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

method:请求方法

extraData:post方法时传递的内容

expectDataType:指定返回数据的类型

header:请求头

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

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的实例,表示有值。也就是说上弥漫两个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组成的数组:

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语言##仓颉##购物#

点赞
收藏
评论区
推荐文章
布局王 布局王
4小时前
Uniapp开发鸿蒙购物项目教程之样式选择器
大家下午好,今天依然为大家带来鸿蒙跨平台开发教程的分享,我们本系列的教程最终要做一个购物应用,通过这个项目为大家分享uniapp开发鸿蒙应用从配置开发环境到应用打包上架的完成过程。昨天的文章实现了应用首页的轮播图,其中涉及到为轮播图设置样式,放一小段代码带
布局王 布局王
4小时前
仓颉开发语言入门教程:搭建开发环境
仓颉开发语言作为华为为鸿蒙系统自研的开发语言,虽然才发布不久,但是它承担着极其重要的历史使命。作为鸿蒙开发者,掌握仓颉开发语言将成为不可或缺的技能,今天我们从零开始,为大家分享仓颉语言的开发教程,今天要分享的是搭建开发环境。仓颉在DevEcostudio和
布局王 布局王
4小时前
仓颉开发语言入门教程:常见UI组件介绍和一些问题踩坑
幽蓝君发现一个问题,仓颉开发语言距离发布马上一年了,一些知名App已经使用仓颉开发了许多功能,但是网络上关于仓颉开发语言的教程少之又少,系统性的教程更是没有,仓颉官网的文档也远远不如ArkTS详尽。现阶段对于想学习仓颉的友友来说非常困难,幽蓝君能做一个针对
布局王 布局王
4小时前
鸿蒙仓颉开发语言实战教程:实现商城应用首页
经过了几天的入门教程,我们终于进入到了仓颉开发语言的实战环节,今天分享的内容是实现商城应用的首页页面,效果图如下:首页的内容包括导航栏、轮播图、商品分类和商品列表,我们下面逐一介绍。导航栏仓颉语言中是没有导航栏组件的,我们需要自己去开发。此处的导航栏也比较
布局王 布局王
4小时前
鸿蒙仓颉开发语言实战教程:自定义组件
关于仓颉开发语言我们已经连续分享了很多天,相信大家对于仓颉开发语言已经有了一定的了解。今天我们继续进阶,分享一个仓颉开发语言中的自定义组件知识。本文案例就以上一篇文章中的自定义tabbar为例,因为我们自己开发的tabbar一直放在index.cj文件中总
布局王 布局王
4小时前
鸿蒙仓颉语言开发教程:页面和组件的生命周期
大家下午好,今天要分享的内容是仓颉开发语言中的生命周期。其实幽蓝君比较喜欢分享代码,不太喜欢讲太理论的东西,今天之所以单独写一篇文章分享生命周期的内容,因为这部分内容如果不讲一下还真是容易踩坑。生命周期指的是页面或者组件从加载、显示到消失的过程,在这个过程
布局王 布局王
4小时前
鸿蒙仓颉语言开发实战教程:实现商品分类页
今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。分类列表先来看左侧的分类列表,很明显是一个List容器,样式上比较简单,
布局王 布局王
4小时前
鸿蒙仓颉语言开发实战教程:购物车页面
大家上午好,仓颉语言商城应用的开发进程已经过半,不知道大家通过这一系列的教程对仓颉开发是否有了进一步的了解。今天要分享的购物车页面:看到这个页面,我们首先要对它简单的分析一下。这个页面一共分为三部分,分别是导航栏、购物车列表和底部的结算栏。也能它们是col
布局王 布局王
4小时前
详解鸿蒙Next仓颉开发语言中的动画
大家上午好,今天来聊一聊仓颉开发语言中的动画开发。仓颉中的动画通常有两种方式,分别是属性动画和显示动画,我们今天以下面的加载动画为例,使用显示动画和属性动画分别实现一下,看看他们有什么区别。显示动画显示动画是幽蓝君比较习惯使用的方式,它主要依赖animat
布局王 布局王
4小时前
详解HarmonyOS NEXT系统中ArkTS和仓颉的混合开发
连续分享了很多天鸿蒙仓颉语言的开发教程,大家现在应该都知道鸿蒙开发有ArkTs和仓颉两种开发语言,这两种语言有些相似,而且还支持混合开发,今天就分享一下怎么实现ArkTs和仓颉的混合开发,分不清这两种语言的友友今天可能要头疼了。官方文档对这两种语言的混合开