不用写代码!用App Inventor 2+百度API做天气APP的全过程记录
从零到一一个高中生用App Inventor 2打造专属天气应用的真实手记去年夏天我所在的科技创新小组接到了一个任务为学校的“智慧校园”项目开发一个简单的天气信息展示模块。作为小组里唯一一个没有系统学习过编程的成员我一开始是懵的。JavaPython听起来都像是另一个世界的语言。直到指导老师向我推荐了App Inventor 2——一个像搭积木一样编程的图形化平台。他告诉我“别怕不用写一行代码你也能做出一个能用的APP。” 这句话点燃了我的好奇心。于是我决定挑战自己用这个工具结合一个公开的天气数据接口从头开始构建一个属于自己的天气应用。这不仅仅是一个项目作业更像是一场关于“非专业开发者如何用工具解决问题”的探索之旅。接下来的文字就是我这场探索的完整记录充满了试错、调试和最终看到界面弹出实时天气时的兴奋。如果你也对创造属于自己的应用感兴趣却苦于没有编程基础那么我的这段经历或许能给你一些实实在在的参考。1. 启程在动手之前先理清“地图”在真正打开App Inventor 2的编辑器之前我花了整整一个下午来研究“天气数据从哪里来”。这可能是整个项目中最关键也最容易让人一开始就卡住的一步。我了解到像天气预报这样的动态数据通常需要通过调用“应用程序编程接口”也就是API来获取。简单来说API就是一个数据窗口我们按照它规定的格式发送一个请求它就会返回给我们结构化的数据。经过一番搜索和比较我选择了一个提供免费天气数据的服务。选择它的原因很简单文档清晰申请流程对个人开发者友好并且返回的数据格式JSON相对容易处理。这里有一个小插曲我最初尝试了另一个更知名的平台但其复杂的认证流程和术语让我这个新手望而却步。所以我的第一个建议是对于初学者选择一个入门门槛低、文档友好的数据源比追求数据的全面性更重要。申请与获取密钥AK的要点注册与实名大部分开放的API服务都需要你注册一个账号并完成个人实名认证。这个过程通常需要提供手机号和身份证信息主要是为了防止滥用。创建应用在平台的控制台里你需要创建一个新的“应用”。这个步骤的核心是获取一个唯一的“访问密钥”Access Key常简写为AK。这个AK就像是你去图书馆借书的借书证每次请求数据时都必须出示它。记录关键信息申请成功后请务必妥善保存平台提供的AK密钥和API请求地址URL。我会把它们记录在一个本地的文本文件里因为接下来会反复用到。一个典型的请求地址看起来像这样https://api.xxx.com/weather/v1/?city北京ak你的密钥。注意将AK直接写在APP中虽然方便但存在被他人提取并滥用的风险。对于学习项目这没问题但如果你未来想发布应用需要考虑更安全的密钥管理方式例如通过自己的服务器中转请求。理清了数据来源拿到了“钥匙”我的“天气APP建造计划”才算真正有了地基。接下来就是进入App Inventor 2开始搭建这个应用的“骨架”和“血肉”了。2. 搭建舞台用组件拼出应用的“脸”和“骨架”打开App Inventor 2的在线设计器https://ai2.appinventor.mit.edu/它的界面分为两大部分左侧的“组件面板”和中间的“视图设计器”。我的工作就是从这里开始的——像玩拼图一样把用户能看到的界面UI搭建出来。我的设计目标很明确一个简洁、信息清晰的天气展示界面。我拖拽了以下核心组件到屏幕中一个文本输入框TextBox让用户输入想要查询的城市名称。一个按钮Button上面写着“查询天气”用户点击它来触发整个查询流程。多个标签Label用来分别显示城市名、天气状况晴/雨/阴、温度、风力、湿度等。我特意用了不同字体大小和颜色的标签来区分主次信息比如温度会用超大号字体突出显示。一个图像Image组件我计划根据不同的天气状况如“晴”、“雨”动态显示不同的图标太阳、云朵、雨伞等。两个网络微数据库Web组件这是整个应用的“隐形引擎”。我从“通信”组件栏里把它拖出来并且放了两个。为什么是两个因为我的查询逻辑分两步第一步根据城市名获取这个城市的唯一编码第二步用这个编码去获取详细的天气数据。用两个独立的Web组件可以让逻辑更清晰避免数据混淆。我把它们重命名为Web_获取城市码和Web_获取天气以便区分。为了让界面更美观我还调整了屏幕的对齐方式AlignHorizontal设置为居中并设置了屏幕Screen1的背景颜色。整个设计过程非常直观所见即所得。下面这个表格总结了我界面中使用的主要组件及其作用组件类型组件名称重命名后主要作用用户输入城市输入框接收用户输入的城市名称触发控件查询按钮用户点击后启动整个天气查询流程数据显示标签_城市显示查询到的城市名称数据显示标签_天气显示天气概况如晴数据显示标签_温度显示当前温度如25℃数据显示标签_风力湿度显示风力和湿度等次要信息视觉增强图像_天气图标根据天气状况动态显示对应图标网络通信Web_获取城市码执行第一步API请求获取城市编码网络通信Web_获取天气执行第二步API请求获取详细天气数据界面搭建好后它看起来还只是一个静态的、不会动的“壳子”。接下来我要进入“逻辑设计”视图用“积木块”为这个壳子注入灵魂让它真正活起来。3. 注入灵魂用“积木”逻辑串联数据流点击右上角的“逻辑设计”按钮我进入了编程的核心区域。这里没有复杂的语法只有五颜六色、形状各异的“积木块”。我的任务就是把这些积木像拼图一样组合起来定义每个组件被操作时应该发生什么。我的核心逻辑链条是用户输入城市 - 点击按钮 - 用城市名请求API1得到城市码 - 用城市码请求API2得到天气数据 - 解析并显示数据。3.1 第一步从城市名到城市码首先我处理“查询按钮”的点击事件。当按钮被点击时我需要用城市输入框里的文本去构造第一个API请求。设置请求地址我从“网络微数据库”Web_获取城市码的抽屉里拖出设置 Web_获取城市码.网址积木。这个网址需要拼接。我用了连接文本积木将固定的API地址、用户输入的城市名和我的AK密钥组合起来。// 这是一个逻辑描述非实际积木代码 当 查询按钮.被点击 时 设置 Web_获取城市码.网址 为 连接文本 “https://api.xxx.com/geocode/v1/?address” 城市输入框.文本 “ak你的AK密钥”发送请求并等待回应紧接着我拖出调用 Web_获取城市码.执行GET请求积木。这个请求是异步的意味着发送后不会立刻有结果。我需要监听它的回应。处理返回的JSON数据我从Web_获取城市码的抽屉里找到当 Web_获取城市码.获得文本 时的事件积木。这个事件会在API返回数据时自动触发。返回的数据是一串JSON文本像这样{ status: 0, result: { location: { code: 101010100 } } }我需要从中提取出code字段的值城市码。App Inventor 2提供了解析JSON文本的积木。我的操作是使用解析JSON文本积木将响应内容即获得文本事件提供的响应代码和响应内容中的内容解析。像剥洋葱一样用获取值积木一层层取出result-location-code对应的值。将这个城市码存入一个全局变量中。我创建了一个名为全局_城市编码的变量。使用全局变量是因为这个值需要在两个完全独立的事件流程第一个请求完成和第二个请求开始之间传递。3.2 第二步用城市码获取详细天气在成功获取城市码并存入全局变量后我立刻在同一个获得文本事件里发起第二个请求。构造第二个请求同样使用连接文本拼接第二个天气API的地址其中城市参数部分使用刚才存入的全局_城市编码。// 逻辑描述 在“当 Web_获取城市码.获得文本 时”的事件内部 设置 全局_城市编码 为 从JSON中提取出的code值 设置 Web_获取天气.网址 为 连接文本 “https://api.xxx.com/weather/v1/?citycode” 全局_城市编码 “ak你的AK密钥” 调用 Web_获取天气.执行GET请求解析并展示复杂的天气数据现在我需要处理第二个Web_获取天气组件的获得文本事件。返回的天气JSON数据更复杂包含了实时天气、未来预报等。例如实时部分可能如下{ realtime: { weather: 晴, temperature: 26, wind: {speed: 3.4}, humidity: 65 } }我重复解析JSON的步骤分别提取出weather、temperature、wind.speed、humidity等值。更新界面组件最后也是最激动人心的一步将解析出的数据“塞”回界面组件。我使用设置 标签_天气.文本、设置 标签_温度.文本等积木将对应的数据展示出来。对于天气图标我预先在“素材”中上传了“sun.png”、“cloud.png”、“rain.png”等图片然后使用如果...那么...逻辑判断积木根据weather字段的值动态设置图像_天气图标.图片属性。至此一个完整的从用户输入到界面展示的数据闭环就打通了。我点击“连接”菜单下的“AI伴侣”在手机上的MIT AI2 Companion App里扫描二维码我的第一个可交互的天气应用原型就在自己的手机上运行起来了4. 优化与排坑让应用更健壮、更友好最初的版本能跑通但体验很粗糙。在接下来的几天里我主要做了以下几项优化工作这也是我从“能运行”到“好用”的关键提升。1. 增加加载状态提示最初点击查询后界面没有任何反应直到数据返回才会突然刷新。这会让用户困惑。我增加了一个标签_状态初始文本为空。在点击按钮时立即将其文本设置为“查询中请稍候...”。在两个获得文本事件的最后再将其清空。这个小改动极大地提升了交互反馈。2. 处理网络错误与无效输入现实世界充满意外。网络可能断开用户可能输入不存在的城市名。我的应用最初遇到这些情况就会崩溃或卡住。我通过以下方式增强了健壮性检查网络状态在发起请求前使用连接状态组件检查网络是否可用如果不可用则用对话框提示用户。解析API返回状态码仔细阅读API文档发现返回的JSON中有一个status字段。成功时为0失败时为其他错误码。我在解析天气数据前先判断status是否为0如果不是则用对话框提示“城市不存在”或“服务异常”并停止后续流程。使用错误事件每个Web组件都有一个错误事件。我为其添加了处理逻辑当请求本身出错如超时时提示“网络请求失败请重试”。3. 优化数据解析与全局变量管理随着功能增加我需要暂存的数据变多了如未来三天的预报。我创建了更多具有清晰命名的全局变量如全局_当前温度、全局_未来预报列表。同时我将复杂的JSON解析过程封装成过程Procedure。例如我创建了一个名为“解析实时天气”的过程输入是JSON文本输出是设置好各个界面标签。这样主逻辑块变得非常简洁易读。4. 美化界面与交互细节字体与布局调整了标签的字体、大小、颜色让关键信息更突出。图片资源为不同的天气状况找到了更精美、风格一致的图标集。按钮反馈为按钮添加了“点击时改变颜色”的简单动画效果提升触感。这个过程并非一帆风顺。我印象最深的一个“坑”是列表索引从1开始。在解析未来预报的数组时我习惯性地用获取列表第0项结果总是出错。调试了很久才发现App Inventor 2中的列表索引是从1开始的这与很多编程语言从0开始不同。改正后一切才正常。5. 超越天气App Inventor 2的无限可能完成这个天气应用后我并没有停下。我意识到App Inventor 2这套“积木式”的编程思维其能力边界远比我想象的宽广。它不仅仅是一个玩具而是真正能实现复杂逻辑和实用功能的开发工具。我尝试拓展的几个方向数据持久化使用微数据库TinyDB组件将用户最后一次查询的城市和天气数据保存到手机本地。下次打开APP时自动加载显示无需再次联网。定时更新利用时钟Clock组件每隔一小时自动在后台刷新一次天气数据并发送本地通知提醒天气变化。集成更多API我尝试接入了空气质量指数AQI的API在界面上额外显示PM2.5和空气质量等级让信息更全面。列表显示学习使用列表视图ListView组件来优雅地展示未来七天的天气预报每一项包含日期、图标、温度范围比用一堆标签堆砌美观得多。这些探索让我明白核心在于两点一是理解如何与网络API进行数据交互GET/POST请求处理JSON响应二是掌握App Inventor 2中事件驱动、组件属性设置、变量和列表操作这些基本“积木块”的用法。一旦掌握了这套方法论你能创造的就不再局限于天气应用。可以是课堂点名器、个人记账本、简易物联网控制器甚至是带有简单AI识别功能的应用通过接入图像识别API。回过头看这段从零开始的经历最宝贵的收获不是那个最终能显示天气的APP而是解决问题的完整思维框架定义需求 - 寻找工具与资源API- 设计界面与流程 - 实现核心逻辑 - 测试与调试 - 优化与完善。App Inventor 2极大地降低了“实现”环节的技术门槛让我这样的非专业开发者能把主要精力集中在思考“要做什么”和“怎么做”上。如果你也有一颗想要创造的心不妨就从这样一个明确的小项目开始亲手搭起你的第一个应用。当你看到自己设计的界面在手机上响应你的操作时那种成就感是无与伦比的。

相关新闻

Ruoyi-Vue 3.8.7集成积木报表JmReport和JimuBI大屏的5个常见问题及解决方案

Ruoyi-Vue 3.8.7集成积木报表JmReport和JimuBI大屏的5个常见问题及解决方案

Ruoyi-Vue 3.8.7 集成 JmReport 与 JimuBI:从依赖冲突到权限配置的深度排雷指南 如果你正在尝试将积木报表 JmReport 和积木大屏 JimuBI 集成到 Ruoyi-Vue 3.8.7 项目中,并且已经按照一些基础教程操作,却依然在启动、访问或功能调用时遇到各种…

2026/5/17 10:55:19 阅读更多 →
从Live系统到ISO:使用systemback制作Ubuntu系统镜像的完整流程

从Live系统到ISO:使用systemback制作Ubuntu系统镜像的完整流程

从Live系统到ISO:使用systemback制作Ubuntu系统镜像的完整流程 你是否曾有过这样的经历:花费数周时间精心配置好一个顺手的Ubuntu开发环境,安装了所有必要的工具、库和个性化设置,结果却因为一次系统更新、硬盘故障或需要在新机器…

2026/7/3 15:09:47 阅读更多 →
解决FanControl传感器识别难题:从故障诊断到性能优化的完整指南

解决FanControl传感器识别难题:从故障诊断到性能优化的完整指南

解决FanControl传感器识别难题:从故障诊断到性能优化的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…

2026/5/17 10:55:16 阅读更多 →

最新新闻

企业微信二次开发实战:API、外部群与自动化应用指南

企业微信二次开发实战:API、外部群与自动化应用指南

引言 企业微信作为腾讯推出的企业级办公平台,其开放的API生态为开发者提供了丰富的二次开发能力。通过企业微信二次开发,企业能够将内部业务流程、客户服务与协同办公深度整合,构建定制化的数字化解决方案。本文将聚焦于企业微信API、企业微…

2026/7/5 2:40:47 阅读更多 →
VMPDump实战指南:动态脱壳VMProtect 3.x的原理与逆向分析

VMPDump实战指南:动态脱壳VMProtect 3.x的原理与逆向分析

1. 项目概述:为什么我们需要VMPDump?在逆向工程和安全研究的圈子里,VMProtect(简称VMP)一直是个让人又爱又恨的存在。爱的是它强大的保护能力,恨的也是它强大的保护能力。尤其是到了3.x版本,其引…

2026/7/5 2:36:47 阅读更多 →
基于SpringBoot的合同管理系统与实现

基于SpringBoot的合同管理系统与实现

选题背景 在当今数字化、信息化高速发展的时代背景下,企业运营与管理正经历着深刻的变革。合同作为企业对外合作、对内管理、明确各方权利义务的核心法律文件与商业凭证,其管理水平直接关系到企业的经营效率、风险控制能力与合规性。传统的人工纸质合同管…

2026/7/5 2:34:45 阅读更多 →
在STM32上跑通TinyML:从理论到实践的技术指南

在STM32上跑通TinyML:从理论到实践的技术指南

一、 引言:为什么要在STM32上部署TinyML?简要介绍TinyML(微型机器学习)的概念、优势及其在边缘计算中的重要性。阐述STM32作为主流微控制器平台,在资源受限环境下运行ML模型的挑战与机遇。二、 核心概念与准备工作2.1 …

2026/7/5 2:34:45 阅读更多 →
WP7有约(一):课程安排

WP7有约(一):课程安排

WP7终于发布了,到目前为止,有关它的新闻和介绍我相信你已经看过不少了,所以这里将会直接跳过,不过在开始之前,我认为还是有必要提醒你做好相关的准备: Expression Blend 4 for Windows Phone和Visual Stud…

2026/7/5 2:32:45 阅读更多 →
PIC18微控制器与SPI EEPROM配置存储方案详解

PIC18微控制器与SPI EEPROM配置存储方案详解

1. 嵌入式系统中的用户配置存储方案选型在开发基于PIC18LF45K42微控制器的嵌入式系统时,如何可靠地存储用户偏好、日程设置和自定义配置是个关键问题。传统方案通常采用微控制器内部EEPROM,但受限于容量(通常仅256-1024字节)和擦写…

2026/7/5 2:32:45 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻