0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发实战-OpenHarmony之天气应用

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-01-24 18:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

“天气之子”

功能描述:

通过请求免费API获取指定城市七天内相关天气信息

开发环境:

IDE:DEV ECO 4.0.600

SDK:4.0.10.15

开发板:DAYU200 4.0.10.16

开发过程

一. 创建项目,调试环境

1.创建项目

#星计划#OpenHarmony开发天气查询应用_OpenHarmony

2.选择OpenHarmony、API10

#星计划#OpenHarmony开发天气查询应用_OpenHarmony_02

3.连网条件下加载依赖

#星计划#OpenHarmony开发天气查询应用_ArkUI_03

4.在开发板上签名,运行HelloWorld测试环境

直接运行,然后点击log报错直达签名

在工具栏File/Project Structure/Signing Configs,勾选Automatically generate签名;运行HelloWorld。

二.修改图标和名称

1.设置-应用管理页面

AppScope/app.json5中查看相关配置

2.桌面

src/main/module.json5中查看相关配置

最终效果:

#星计划#OpenHarmony开发天气查询应用_ArkUI_04

#星计划#OpenHarmony开发天气查询应用_OpenHarmony_05

三.添加网络权限

因为需要用到网络数据,所以添加initent权限。

在src/main/module.json5的model中添加配置。

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

四.自定义Model

在ets中新建model文件夹,建立ArkTS文件,基于API返回结果结合需要自定义类
API返回结果:
#星计划#OpenHarmony开发天气查询应用_OpenHarmony_06

源码如下

export class Item{
  name:string = "紫外线强度指数"
  level:string = "中等"
  // code:string = "uv"
}

export class Result1{//每1天
  city:string = '徐州'
  date:Date = new Date
  temp_day:number = 4
  temp_night:number = -1
  wea_day:string = "晴"
  wea_night:string = '晴'
  wind_day:string = "南风"
  wind_night:string = "南风"
  wind_day_level:string = "< 3级"
  wind_night_level:string = "< 3级"
  air_level:string = "轻度"
  sunrise:string = "07:17"
  sunset:string = "17:19"
  index:Array< Item > = []//建议
}

export class Result0{
  code:number = 200
  msg:string = 'success'
  data:Array< Result1 > = []//7天
}

五.制作index页面、请求网络数据

1.请求网络数据

1.导入http模块

import http from '@ohos.net.http';
import { BusinessError } from '@ohos.base';

2.创建createHttp

let httpRequest = http.createHttp();

3.填写HTTP地址

httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
      "https://v2.alapi.cn/api/tianqi/seven",
      {
        method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
        // // 开发者根据自身业务需要添加header字段
        header: [{
          'Content-Type': 'application/json'
        }],
        // 当使用POST请求时此字段用于传递内容
        extraData: {
          "token": "自己的token",
          "type": "all",
          "format": "json"
        },
   
      }, (err: BusinessError, data: http.HttpResponse) = > {
 
    }
    );

4.对网络数据的处理

if (!err) {
        let result:Result0 = JSON.parse(data.result.toString())
        if(result.code == 200){
          this.a = result.data
        }
        else {
          this.message = result.msg
        }
        httpRequest.destroy();
      } else {
        this.message = JSON.stringify(err)
        // console.error('error:' + JSON.stringify(err));
        // 当该请求使用完毕时,调用destroy方法主动销毁
        httpRequest.destroy();
      }

完整代码:

GetData(city:string) {
  // 3.每一个httpRequest对应一个HTTP请求任务,不可复用
  let httpRequest = http.createHttp();
  // 4.
  httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
    "https://v2.alapi.cn/api/tianqi/seven",
    {
      method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
      extraData: {
        "token": "自己的token",
        "city":city,
      },
    },
    (err: BusinessError, data: http.HttpResponse) = > {
      if (!err) {
        let result:Result0 = JSON.parse(data.result.toString())
        if(result.code == 200){
          this.a = result.data
        }
        else {
          this.message = result.msg
        }
        httpRequest.destroy();
      } else {
        this.message = JSON.stringify(err)
        // console.error('error:' + JSON.stringify(err));
        // 当该请求使用完毕时,调用destroy方法主动销毁
        httpRequest.destroy();
      }
    }
  )
}

如果显示2300006错误码,很可能是网络问题

2.制作UI

1.文本输入框

TextInput({
      placeholder:"请输入查询城市名,如:徐州",
    }).onChange((item:string)= >{
      if(item!=null && item!=undefined){
        this.message = item
      }
    }).maxLength(8).type(InputType.Normal)

2.“查询”按钮:点击页面进行跳转到列表页

Button("查询").onClick(()= >{
      this.GetData(this.message)
      //跳转
      if(this.a!=null && this.a!=undefined && this.a.length >0){
        router.pushUrl({
          url:"pages/ListPage",
          params:this.a
        })
      }
      else{
        promptAction.showToast({message:"请重试~"})//数据请求失败
      }
    }).backgroundColor(Color.Transparent).width("50%")

最终界面:
#星计划#OpenHarmony开发天气查询应用_ArkUI_07

六.制作列表页(跳转到的第二张页面)

先看最终效果:
#星计划#OpenHarmony开发天气查询应用_ArkUI_08

1.自定义组件

#星计划#OpenHarmony开发天气查询应用_ArkUI_09

Component装饰器修饰 ,定义struct,并且用关键字export导出

@Component
export struct ALine{//日期 天气图片 详情跳转
  @State date:Date = new Date
  @State wea:string = '晴'

  build(){
    Row(){
      Text(this.date.toString()).fontSize(25).fontWeight(FontWeight.Bold).margin({right:240}).fontColor(Color.White)

      Text("(白天)"+this.wea).fontColor(Color.White)

      Text("  >").fontWeight(FontWeight.Lighter).fontSize(30).fontColor(Color.White)
    }.width("100%").height("100%")
    .border({color:Color.Transparent}).borderRadius(14).borderWidth(3)
    .backgroundImage($r("app.media.LLBG")).backgroundImagePosition(Alignment.Center)
  }
}

2.页面UI

1.首先接收上一页面传输数据

@State a:Array< Result1 > = router.getParams() as Array< Result1 >

2.主要用到List,Column,Row,Text和自定义组件;利用ForEach循环渲染;每一个自定义组件绑定一个点击事件,可分别跳转到详情页。

源码:

Column({space:5}){
      Text(this.a[0].city).fontSize(50).fontColor(Color.White)

      List({space:20}){
        ForEach(this.a,(item:Result1)= >{
          ListItem(){
            ALine({date:item.date,wea:item.wea_day})
              .onClick(()= >{//
                router.pushUrl({
                  url:"pages/DetailPage",
                  params:item
                })
              })
          }.height("20%").width("100%")
        })
      }.width("100%").height("100%").scrollBar(BarState.Off)
    }.backgroundImage($r("app.media.LPBG")).backgroundImageSize(ImageSize.Cover)

七.制作详情页(点击自定义组件跳转到的第三张页面)

有了前面两张页面的基础,这一张可以较为顺利完成,故不再赘述。

最终效果:
#星计划#OpenHarmony开发天气查询应用_ArkUI_10

本文主要是对鸿蒙开发中的实战讲解,制作天气应用原生开发。有关更多的实战学习,可以往主页阅读更多;鸿蒙的技术分布内容有如下:

高清完整或者实战文档,可以找我保存

八.总结

此项目主要练习了:

  1. List,Column,Row,Text,Divider,Image,promptAction等组件及其属性
  2. 网络数据请求
  3. 页面跳转及传输数据
  4. 自定义组件
  5. 自定义类
  6. 做自己喜欢的UI

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    2506

    浏览量

    67138
  • OpenHarmony
    +关注

    关注

    33

    文章

    3984

    浏览量

    21458
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    OpenHarmony开发开源资料!凌蒙派-RK3568开发板:从入门到实战的全栈硬件平台

    随着 OpenHarmony 生态的持续壮大,越来越多开发者投身于鸿蒙硬件开发 —— 但 “找板难、入门繁、案例少” 的问题,却成了不少人的 “开局绊脚石”。今天要给大家推荐的,正是一
    的头像 发表于 02-05 13:56 740次阅读
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发</b>开源资料!凌蒙派-RK3568<b class='flag-5'>开发</b>板:从入门到<b class='flag-5'>实战</b>的全栈硬件平台

    M4-R1 开源鸿蒙(OpenHarmory)开发板丨串口调试助手实战案例

    前言开源鸿蒙OpenHarmony)作为国产分布式操作系统,正在为智能终端与物联网设备构建统一的开放生态。它以开源共建的方式,为多设备协同与产业创新提供坚实基础。M4-R1开发板凭借完善的软硬件
    的头像 发表于 12-31 11:16 9432次阅读
    M4-R1 开源<b class='flag-5'>鸿蒙</b>(OpenHarmory)<b class='flag-5'>开发</b>板丨串口调试助手<b class='flag-5'>实战</b>案例

    融合AI的OpenHarmony应用软件开发:ai学习自律辅助软件

    *附件:ai study.zip*附件:融合AI的OpenHarmony应用软件开发:ai学习自律辅助软件.pdf 基于开源鸿蒙编写的ai辅助学习软件
    发表于 11-12 15:38

    触觉智能Purple Pi OH开发板率先适配OpenHarmony6.0 Release,鸿蒙明星开发

    2025年9月19日,在官网上线开源鸿蒙OpenHarmony6.0Release仅13天,触觉智能宣布旗下PurplePiOH开发板成功完成OpenHarmony6.0Release
    的头像 发表于 10-29 08:00 1226次阅读
    触觉智能Purple Pi OH<b class='flag-5'>开发</b>板率先适配<b class='flag-5'>OpenHarmony</b>6.0 Release,<b class='flag-5'>鸿蒙</b>明星<b class='flag-5'>开发</b>板

    触觉智能RK3576开发OpenHarmony开源鸿蒙系统USB控制传输功能示例

    本文介绍OpenHarmony开源鸿蒙系统的USB控制传输功能实现及相关代码示例,基于触觉智能RK3576开发板PurplePiOH2演示。OpenHarmony的USB通信介绍实现
    的头像 发表于 09-30 16:31 1917次阅读
    触觉智能RK3576<b class='flag-5'>开发</b>板<b class='flag-5'>OpenHarmony</b>开源<b class='flag-5'>鸿蒙</b>系统USB控制传输功能示例

    触觉智能RK3506开发板通过OpenHarmony 5.1 XTS认证,引领鸿蒙开发新标杆!

    触觉智能作为瑞芯微专业方案商与开源鸿蒙南向硬件厂家,旗下RK3506开发板及其核心板(模组)通过OpenHarmony5.1XTS认证!这一消息犹在行业内引起了广泛关注,标志着触觉智能在鸿蒙
    的头像 发表于 08-14 23:49 2099次阅读
    触觉智能RK3506<b class='flag-5'>开发</b>板通过<b class='flag-5'>OpenHarmony</b> 5.1 XTS认证,引领<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>新标杆!

    开鸿开发板深度体验:从开源鸿蒙开发到AI场景实践

    的KaihongBoard-3588S-SBC和KaihongBoard-3576-SBC被评为“2025OpenHarmony明星开发板”,可实现设备快速开源鸿蒙化升级、分布式互联协同、弹性部署等能力。
    的头像 发表于 07-03 17:03 2098次阅读
    开鸿<b class='flag-5'>开发</b>板深度体验:从开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>到AI场景实践

    鸿蒙5开发宝藏案例分享---一多开发实例(音乐)

    各位开发者小伙伴们好呀!今天咱们来点硬核干货!最近在鸿蒙文档中心挖到一座“金矿”——官方竟然暗藏了100+实战案例,从分布式架构到交互动效优化应有尽有!这些案例不仅藏着华为工程师的私房技巧,还直接
    的头像 发表于 06-30 11:54 901次阅读

    鸿蒙5开发宝藏案例分享---埋点开发实战指南

    鸿蒙埋点开发宝藏指南:官方案例实战解析,轻松搞定数据追踪! 大家好呀!我是HarmonyOS开发路上的探索者。最近在折腾应用埋点时,意外发现了鸿蒙
    发表于 06-12 16:30

    开源鸿蒙开发必备!OpenHarmony替换Full SDK全攻略

    本文介绍开源鸿蒙OpenHarmony替换FullSDK的方法,演示设备为触觉智能PurplePiOH鸿蒙开发板获取FullSD
    的头像 发表于 06-06 18:11 1116次阅读
    开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>必备!<b class='flag-5'>OpenHarmony</b>替换Full SDK全攻略

    触觉智能鸿蒙开发板率先通过OpenHarmony5.0认证(生态产品兼容性证书)

    触觉智能PurplePiOH鸿蒙开发板继4.1版本XTS认证火速出圈后,再次狂飙!成功通过OpenHarmony5.0ReleaseXTS认证,成为首批开放原子基金会生态产品之一。这一认证标志着其在
    的头像 发表于 06-06 17:54 1538次阅读
    触觉智能<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>板率先通过<b class='flag-5'>OpenHarmony</b>5.0认证(生态产品兼容性证书)

    全志科技亮相OpenHarmony开发者大会2025

    近日,OpenHarmony开发者大会 2025(OHDC.2025,以下简称“大会”)在深圳举办。大会正式发布了开源鸿蒙5.1 Release版本,举行了“开源鸿蒙应用技术组件共建启
    的头像 发表于 06-04 09:16 2493次阅读
    全志科技亮相<b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发</b>者大会2025

    润和软件旗下润开鸿亮相开源鸿蒙开发者大会2025

    近日,开源鸿蒙开发者大会2025(OHDC.2025)于深圳再启新篇,会上正式发布了开源鸿蒙5.1 Release版本,并进行开源鸿蒙应用技术组件共建启动等重要仪式,面向
    的头像 发表于 06-03 16:22 1833次阅读

    华为亮相2025开源鸿蒙开发者大会

    近日,开源鸿蒙开发者大会2025(以下简称大会)在深圳成功举办。大会以开源鸿蒙5.1 Release版本发布为契机,聚焦开源鸿蒙技术革新和社区发展,全面呈现“Powered
    的头像 发表于 05-29 09:07 1544次阅读

    贝启BQ3568HM 开发板被选用为 OpenHarmony 明星开发

    经开放原子开源基金会OpenHarmony社区官方测评评选,贝启科技BQ3568HM开源鸿蒙开发板被正式选用为OpenHarmony明星开发
    的头像 发表于 05-25 00:22 1831次阅读
    贝启BQ3568HM <b class='flag-5'>开发</b>板被选用为 <b class='flag-5'>OpenHarmony</b> 明星<b class='flag-5'>开发</b>板