微信小程序入门:和风天气小程序

《移动软件开发》实验2

一、实验目标

1、掌握服务器域名配置和临时服务器部署;

2、掌握 wx.request 接口的用法。

二、实验步骤

1.使用和风天气API的准备工作

1.1 API密钥申请

在和风天气开发平台进行注册

和风天气开发平台 ~ 高效强大的天气API,天气SDK和天气插件 (qweather.com)

注册后在控制台的应用管理中,创建应用
在这里插入图片描述
获得了KEY
在这里插入图片描述

1.2 API调用方法

开发版 :https://devapi.qweather.com/v7/weather/now?[请求参数]

参数具体如下,使用时多参数以&&连接

如获取北京的天气情况:

https://devapi.qweather.com/v7/weather/now?location=101010100&key=你的KEY

请求URL和格式,具体参考和风官方开发文档

实时天气 - API | 和风天气开发平台 (qweather.com)

返回类型为json格式的键值对,同样参考开发文档,选取需要的即可;

1.3 服务器域名配置

小程序在与指定域名地址通信前需要将该域名地址添加到管理员后台白名单中;

故需要将https://devapi.qweather.com进行服务器配置。

登录mp.weixin.qq.com进入管理员后台进行配置
在这里插入图片描述

2.项目创建

2.1 获得一个空项目

将创建的项目中app.json中logs路径删除,logs文件夹及其下内容wxml内容等删去,具体参照上一篇步骤;

2.2 导入素材

本次会使用到和风图标素材,故需要先导入到小程序目录下

天气图标 - RESOURCE | 和风天气开发平台 (qweather.com)

先去和风平台下载icons资源包,可以在GitHub下将icons压缩包下载,较为方便;

在这里插入图片描述

3.视图设计

3.1导航栏设计

需要在app.json中将导航栏进行设计:
在这里插入图片描述

3.2界面设计

设计要求如下:
在这里插入图片描述

页面的设计图如下
在这里插入图片描述

此处用到picker组件,对城市进行选择;
随后对天气文本、图标、详细信息等进行设计:
在这里插入图片描述

再对详细信息进行设计

在这里插入图片描述

使用了三种自定义样式,也要在wxss中进行定义;

wxss设计与展示效果:

3.3 逻辑设计

3.3.1 更新省市区信息

在index.js中 data中声明region变量,赋初值;

编写一个函数regionChange进行对region变量的修改;

在这里插入图片描述

将其绑定在picker上;

在这里插入图片描述

实现效果:

在这里插入图片描述

3.3.2 实时更新天气信息

编写用于获取天气信息的函数,使用和风天气的API,在生命周期函数Onload和自定义函数regionChange中分别调用,用于初始化和切换城市时数据刷新;

getWeather的实现:
在这里插入图片描述

在Onload和regionChange的调用:
在这里插入图片描述

获取城市的天气信息,需要得到locationID,regionChange中获取的是城市名字,故还需要调用API来获取locationID,API使用具体参考官方文档

城市信息查询 - API | 和风天气开发平台 (qweather.com)

需要在开发平台中加入该域名

https://geoapi.qweather.com

防止重名,引入一个参数adm
在这里插入图片描述

编写的获取locationID的函数:
在这里插入图片描述

先获取locationID再通过locationID调用getWeather来获取当地的天气,此处会存在wx.request异步的问题,在问题总结与体会第3项进行了具体的解释;

修改后的getlocationID如下:
在这里插入图片描述

修改后的函数调用:

3.3.3更新页面天气信息

在page的data中声明now数组
在这里插入图片描述

将WXML页面上所有临时数据都替换为{ {now.XXX}}

在这里插入图片描述

函数可以正常运行:
在这里插入图片描述

三、程序运行结果

初始状态:
在这里插入图片描述

切换城市:

切换后:

在这里插入图片描述

效果展示:(GIF)

在这里插入图片描述

四、问题总结与体会

1.显示“登录用户不是小程序的开发者”,导致无法真机调试等问题
在这里插入图片描述

同时这样导致我调用API时失败,毕竟用的appid不对。。。之前设置的服务器域名就白搭了。

解决办法:修改文件中appid

修改后解决,也不知道为什么创建时用了这个appid;

2.使用此方法调用API时,返回错误数据 code:”400“

在这里插入图片描述
在这里插入图片描述

官方文档中location应为locationID,而教程所给可能是汉字;

经测试确实如此,而放入locationID是可以正常返回的
在这里插入图片描述

所以需要从picker中去获取locationID

解决方法:使用和风天气的城市查询接口

所以需要从picker中去获取locationID

解决方法:使用和风天气的城市查询接口

3.两个函数不按顺序执行

[外链图片转存中...(img-oKqnouKw-1660812755962)]

希望先获取locationID再用得到的locationID来获取地区的天气信息,但实际执行情况恰恰相反,导致更新可能出错;

**解决方法:**因为wx.request是异步的,所以使用Promise包装来实现顺序执行;

成功解决:

[外链图片转存中...(img-3yz3j6TS-1660812755963)]

猜你喜欢

转载自blog.csdn.net/qq_54484914/article/details/126409385
今日推荐