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

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

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

网络权限

网络权限在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<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组成的数组:

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

#harmonyos#
全部评论

相关推荐

06-23 11:28
门头沟学院 Java
牛客919661971号:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务