首页 > 其他分享 >【木棉花】在HarmonyOS中实现天气服务功能

【木棉花】在HarmonyOS中实现天气服务功能

时间:2023-11-09 11:06:50浏览次数:29  
标签:木棉花 http string XL cityName 天气 HarmonyOS Weather WeatherServiceManager

介绍

本案例通过调用云端的天气服务API,在HarmonyOS中实现天气服务功能。开发者们可根据不同业务场景,在本案例的基础上集成自己的天气服务管理者模块。



【木棉花】在HarmonyOS中实现天气服务功能_木棉花

开发环境要求

DevEco Studio版本:DevEco Studio 3.1 Release

● HarmonyOS SDK版本:API version 9

工程要求

● API9

● Stage模型

【木棉花】在HarmonyOS中实现天气服务功能_木棉花_02


正文

前置条件

在本案例中,实现天气服务的功能需要聚合数据平台提供的天气预报云服务。开发者需要在聚合数据平台注册和登录账号,然后申请天气预报的API,并通过实名认证获取自己的Key。通过Key,我们就可以通过http数据请求的方式调用天气预报的API,而官方会为每名开发者提供50次的每日免费调用次数。


代码结构

entry/src/main
  ├─ module.json5    		//模块的配置文件
  ├─ resources        		//资源文件集
  └─ ets
     ├─ XL_Modules      
     │  └─ XL_WeatherServiceManager.ts       //天气服务管理者ts模块
     ├─ pages
     │  └─ Index.ets			//主页面
     └─ entryability
          └─ EntryAbility.ts     //UIAbility类


关键代码

XL_WeatherServiceManager.ts

//导入http模块
import http from '@ohos.net.http'

//定义日志标签
const TAG1 = '------[XL_WeatherServiceManager  inquire] '

//提供云服务接口的网址片段
const Weather_Url_Part:string = "http://apis.juhe.cn/simpleWeather/query?key="

//开发者在聚合数据的请求Key(需要自行填入)
const key:string = ......

//声明一个专用于记录天气信息的数据类型
declare type RealTime_Weather_Result = {

  //实时数据
  realtime: any,

  //今日整体数据
  today:any,

  //是否成功拉取
  isFinished: boolean

}

/*
  异步函数: 获取对应城市的天气数据
 */
async function Pull_Weather_Data(cityName: string, Tag: string):Promise<RealTime_Weather_Result>{
	
  //预定义输出
  var output = {
    realtime: null,
    today: null,
    isFinished: false
  }

  //实例化一个http请求任务类
  let httpRequest = http.createHttp();

	//拼接url,以供访问服务器
  let URL = Weather_Url_Part+key+'&city='+cityName

  //调用异步方法request
  await httpRequest.request(
    URL,
    {
      //设置请求方法的类型
      method: http.RequestMethod.GET,
    }).then((data) => {

    //提取http响应的关键内容
    let Weather_Info = JSON.parse(data.result.toString())
	
    //当关键内容中所携带的错误码为0时,表示成功拉取了天气数据
    if(Weather_Info?.error_code == 0){

      console.info(TAG1+'Succeed! Obtain the weather data')
      
      //在日志栏打印天气信息
      console.info(TAG1+JSON.stringify(Weather_Info?.result?.realtime))
      console.info(TAG1+JSON.stringify(Weather_Info?.result?.future[0]))
			
      //存取天气信息
      output.realtime = Weather_Info?.result?.realtime
      output.today = Weather_Info?.result?.future[0]
      
      output.isFinished = true

    }else{
      console.error(Tag+Weather_Info?.reason)
    }

  }).catch(err => console.error(Tag + 'Http request failed, err:  ' + `${err}`))

  //销毁http任务类
  httpRequest.destroy()

	//输出
  return output

}


//默认导出的静态型模块类
class XL_WeatherServiceManager {

  //查询某城市天气的方法
  public static async inquire(cityName: string):Promise<RealTime_Weather_Result>{
    return await Pull_Weather_Data(cityName, TAG1)
  }
	
  /*
   *  敬请期待
   */
  
}

export default XL_WeatherServiceManager

在XL_WeatherServiceManager.ts中,我们通过http请求的方式,获取并解析服务器所回馈的天气预报信息。值得一提的是,我们创建了类XL_WeatherServiceManager,此类有个静态公共方法inquire调用了拉取天气信息的异步函数,并且XL_WeatherServiceManager是默认导出的。因此,我们可以在页面中导入XL_WeatherServiceManager,并通过执行require方法调用获取天气信息的功能。

import XL_WeatherServiceManager from  'ets/XL_Modules/XL_WeatherServiceManager'

......
let result = await XL_WeatherServiceManager.inquire('北京')
......


在页面中调用

Index.ets(伪代码)

//导入自定义的天气服务管理模块
import XL_WeatherServiceManager from  'ets/XL_Modules/XL_WeatherServiceManager'

@Entry
@Component
struct Index {

  @State message: string = 'Hello World'

  @State cityName:string = ''
  @State currentTemperature:string = ''
  @State currentWeather:string = ''
  @State todayTemperature:string = ''
  @State translateY:number = 700

  build() {

 				......
				
        Search({
          placeholder: '请输入城市名'
        })
        //添加回调函数
          .onSubmit((cityName:string)=>{
            this.Search(cityName)
          })
          ......
          
				......
       
    }

	//自定义异步方法
  async Search(cityName:string){
		
    //通过天气服务管理者调用inquire方法,并传入城市名参数
    let res = await XL_WeatherServiceManager.inquire(cityName)

    if(res.isFinished){
    
    	//根据需求读取信息
      this.currentTemperature = res.realtime.temperature
      this.currentWeather = res.realtime.info
      this.todayTemperature = res.today.temperature
      
      this.cityName = cityName
      this.translateY = 0
      
    }

  }


}


结尾

文章所述仅代表个人理解,如有不足恳请读者不吝赐教。

【木棉花】在HarmonyOS中实现天气服务功能_ArkTS_03

本文作者:木棉花_小蓝

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com/#bkwz

标签:木棉花,http,string,XL,cityName,天气,HarmonyOS,Weather,WeatherServiceManager
From: https://blog.51cto.com/harmonyos/8273834

相关文章

  • HarmonyOS NEXT调优工具Smart Perf Host高效使用指南
     在软件开发的过程中,很多开发者都经常会遇到一些性能问题,比如应用启动慢、点击滑动卡顿、应用后台被杀等,想要解决这些问题势必需要收集大量系统数据。而在收集数据的过程中,开发者则需要在各种工具和命令之间来回切换,不但容易错过问题发生时间点,数据收集完如何能将信息有效结合......
  • HarmonyOS应用开发
    引言本章将深入探讨HarmonyOS应用开发的关键方面,包括应用的生命周期、数据存储和网络访问。了解这些内容对于创建功能丰富、高效的HarmonyOS应用至关重要。目录HarmonyOS应用的生命周期HarmonyOS应用的数据存储HarmonyOS应用的网络访问总结1.HarmonyOS应用的生......
  • Vue学习笔记4: 天气案例
    4.Vue学习笔记4:天气案例<!--准备好一个容器--><divid="root"><h2>今天天气很{{info}}</h2><!--绑定事件的时候:@xxx="yyy"yyy可以写一些简单的语句--><!--<button@click="isHot=!isHot">切换天气</button>-->......
  • HarmonyOS Sans 系列字体托管计划
    华为几年前公开了HarmonyOS上的默认字体HarmonyOSSans系列。笔者自己使用的过程中,感觉字体设计很优美,逐渐在自己日常使用的Linux发行版、Chrome浏览器、代码编辑器中将它作为所有中文部分的默认字体。今天,笔者偶然发现了GitHub上对应的开源Web字体IKKI2000/harmonyo......
  • 助力鸿蒙生态建设|坚果派6位华为HDE以及若干成员喜获HarmonyOS专业证书
    助力鸿蒙生态建设|坚果派6位华为HDE以及若干成员喜获HarmonyOS专业证书2023年10月25日-27日,在华为开发者联盟的精心组织下,为期三天的鸿蒙生态师资培训营(以下简称“鸿蒙培训营”)上海站活动圆满落下帷幕。坚果派创始人坚果代表组织参加。这里坚果还有一个身份,就是江苏润开鸿数字科技有......
  • HarmonyOS数据管理与应用数据持久化(二)
    通过键值型数据库实现数据持久化场景介绍键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备类型,因此推荐使用键值型数据库持久化此类数据。约束限制......
  • HarmonyOS数据管理与应用数据持久化(二)
    通过键值型数据库实现数据持久化场景介绍键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备类型,因此推荐使用键值型数据库持久化此类数据。约束限......
  • HarmonyOS数据管理与应用数据持久化(一)
    HarmonyOS数据管理与应用数据持久化(一)一.数据管理概述功能介绍数据管理为开发者提供数据存储、数据管理能力,比如联系人应用数据可以保存到数据库中,提供数据库的安全、可靠等管理机制。● 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、键值型数据库和关系型数据库......
  • HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标
    HarmonyOS设计文档中,为大家提供了独特的元服务图标,开发者可以根据需要直接引用。开发者直接使用官方提供的元服务图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的元服务图标侵权意外情况等,减少自主创作元服务图标的工作量。当然,如果有个性化的自主又有......
  • 打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态
    从今年8月起,所有升级到HarmonyOS4的手机用户在美团外卖下单后,可通过屏幕上的一个“小窗口”,随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”,就是实况窗功能。实况窗:简单接入,关键信息时刻在线基于PushKit实现的实况窗功能作为Harmon......