当前位置: 首页 > news >正文

第九十六回 网络综合示例:获取天气信息

文章目录

  • 概念介绍
  • 使用方法
  • 示例代码

我们在上一章回中介绍了dio库中转换器相关的内容,本章回中将介绍网络综合示例:获取天气信息.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在前面章回中介绍了网络操作相关的内容,本章回中将综合利用这些内容实现一个获取天气信息的例子。主要包含dio库的使用、网络操作的封装和JSON数据解析这些内容。在实际项目中这些内容是网络内容中必备的内容,而且它们之间需要相互配合才能完成网络操作。

使用方法

  1. 导入dio包,并且对它进行封装,主要是网络请求参数和网络操作的封装;
  2. 在天气信息网站注册账号并且获取授权使用API的私钥,我注册的是心知天气;
  3. 依据API的操作说明配置与请求相关的参数,比如API的path和请求相关的参数;
  4. 依据API返回的内容,创建天气信息model类,为转换JSON数据做准备,可以借助插件完成;
  5. 使用Button类Widget,在它的onpress属性中发起获取天气信息的操作,然后通过日志打印出天气信息;

示例代码

///封装DIO网络库
///封装常用的网络参数
class HttpConfig {static const String BASE_URL = "https://api.seniverse.com";static const int TIME_OUT = 15;///对应天气实况// var TIAN_QI_SHI_KUANG = "https://api.seniverse.com/v3/weather/now.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c";static const PATH_TIAN_QI_SHI_KUANG = "/v3/weather/now.json";///对应24小时逐小时天气预报// var HOUR24 = "https://api.seniverse.com/v3/weather/hourly.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c&start=0&hours=24";static const PATH_HOUR24 = "/v3/weather/hourly.json";///对应未来15天逐日天气预报和和昨日天气,不过免费的key只能获取3天的天气预报// var FORECAST_DAYS = "https://api.seniverse.com/v3/weather/daily.json?key=your_api_key&location=beijing&language=zh-Hans&unit=c&start=0&days=3";static const PATH_FORECAST_DAYS = "/v3/weather/daily.json";
}class HttpRequest {static final baseOptions = BaseOptions(baseUrl: HttpConfig.BASE_URL,connectTimeout: Duration(seconds: HttpConfig.TIME_OUT),sendTimeout: Duration(seconds: HttpConfig.TIME_OUT),receiveTimeout: Duration(seconds: HttpConfig.TIME_OUT),);static final mdio = Dio(baseOptions);
///把网络操作相关的功能封装成独立的方法,网络操作相关的数据通过url和params参数传递static Future<T> request<T>(String url,{String method='get',required Map<String,dynamic> params,Interceptor? interceptor,}) async {final option = Options(method: method);///添加拦截器Interceptor _interceptor = InterceptorsWrapper(onRequest: (options,handler) {return handler.next(options);},onResponse: (response,handler){print('response: ' + response.toString());return handler.next(response);},onError: (error,handler) {print('response: ' + error.toString());return handler.next(error);},);mdio.interceptors.add(_interceptor);///默认也会抛出异常,这里只用来捕获特定的异常try {Response response = await mdio.request(url, queryParameters: params, options: option);return response.data;}on DioException catch (e) {print(e.toString());return Future.error(e);}}
}///获取天气信息,网络框架使用httpRequest,请求参数使用map添加
_getWeatherInfo() async {var url = HttpConfig.BASE_URL+HttpConfig.PATH_TIAN_QI_SHI_KUANG;Map<String,String> queryParams = {};queryParams['key'] = PrivateKey.key;queryParams['location'] = 'beijing';queryParams['language'] = 'zh-Hans';queryParams['unit'] = 'c';TestRequest _testRequest = TestRequest();_testRequest.addRequestParams('key',PrivateKey.key).addRequestParams('location', 'beijing').addRequestParams('language', 'zh-Hans').addRequestParams('unit', 'c');HttpRequest.request(url, params: queryParams).then((value){debugPrint(XZWeatherBeanEntity.fromJson(value).toString());XZWeatherBeanEntity.fromJson(value).results?.forEach((element) {print("now: ${element.now}");});});
}///获取天气信息,网络框架使用httpRequest,请求参数使用map添加
_getWeatherInfo() async {var url = HttpConfig.BASE_URL+HttpConfig.PATH_TIAN_QI_SHI_KUANG;Map<String,String> queryParams = {};queryParams['key'] = PrivateKey.key;queryParams['location'] = 'beijing';queryParams['language'] = 'zh-Hans';queryParams['unit'] = 'c';TestRequest _testRequest = TestRequest();_testRequest.addRequestParams('key',PrivateKey.key).addRequestParams('location', 'beijing').addRequestParams('language', 'zh-Hans').addRequestParams('unit', 'c');HttpRequest.request(url, params: queryParams).then((value){debugPrint(XZWeatherBeanEntity.fromJson(value).toString());XZWeatherBeanEntity.fromJson(value).results?.forEach((element) {print("now: ${element.now}");});});
}ElevatedButton(onPressed: () {debugPrint('get weather button clicked');_getWeatherInfo();},child: Text('get weather by HttpRequest'),
),

上面的代码中没有包含JSON解析相关的代码,除此之外包含了全部的内容,没有包含的代码可以查看Github上完整内容。代码中的api来自心知天气的api操作手册,这里只列出了一部分。

编译并且运行上面的程序,可以获取到北京的实时天气信息。不过大家需要使用自己申请到的私钥替换代码中的PrivateKey.key

上面的示例代码中只演示了如何查询实时天气信息,建议大家自己动手实现查询最近3天天气信息的内容,这样可以起到举一反三的效果。

看官们,关于"网络综合示例:获取天气信息"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关文章:

第九十六回 网络综合示例:获取天气信息

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了dio库中转换器相关的内容&#xff0c;本章回中将介绍网络综合示例&#xff1a;获取天气信息.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面章回中介绍了网络操作相关的内容&#xff0c;本章…...

Shell中获取昨天和多天前日期

1、获取今天日期 $ date -d now %Y-%m-%d 或者 $ date %F2、获取明天日期 $ date -d next-day %Y-%m-%d $ date -d tomorrow %Y-%m-%d3、获取昨天日期 $ date -d yesterday %Y-%m-%d 或者 $ date -d last-day %Y-%m-%d 或者 $ date -d "1 days ago" %Y-%m-%d …...

golang静态编译及编译失败排查步骤

文章目录 一、背景前提 二、静态编译概述1、执行静态编译设置CGO_ENABLED方式指定link方式 2、编译报错分析&#xff08;1&#xff09;确认系统上有没有安装libopus&#xff08;2&#xff09;设置LD_LIBRARY_PATH 三、详细排查过程1、下载bpf排查工具bcc, bcc-tools,python-bcc…...

2023年7月第4周大模型荟萃

2023年7月第4周大模型荟萃 2023.7.31版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、Cerebras推出全球最强AI超算 AI芯片初创公司Cerebras Systems和总部位于阿联酋的技术控股集团G42于7月20日宣布&#xff0c;携手打造一个由互联的超…...

Meta分析的选题与文献计量分析CiteSpace应用丨R语言Meta分析【数据清洗、精美作图、回归分析、诊断分析、不确定性及贝叶斯应用】

目录 ​专题一、Meta分析的选题与文献计量分析CiteSpace应用 专题二、Meta分析与R语言数据清洗及相关应用 专题三、R语言Meta分析与精美作图 专题四、R语言Meta回归分析 专题五、R语言Meta诊断分析与进阶 专题六、R语言Meta分析的不确定性及贝叶斯应用 专题七、深度拓展…...

vscode eslint配置

1. 全局安装 eslint npm install -g eslint 2. control shift p 输入 settings 打开设置进行配置 3. 添加配置 {"workbench.colorTheme": "One Dark Pro","eslint.debug": true,"eslint.execArgv": null,"eslint.alwaysShow…...

C++ 对象模型 C++ Object Model

C 对象模型 C Object Model 文章目录 C 对象模型 C Object ModelC语言的数据及函数C的类C对象模型 C语言的数据及函数 C语言中&#xff0c;数据和函数是分开声明的。 数据 typedef struct point2d {float x;float y; } Point2d;函数 打印Point2d的数值 void Point2d_print…...

leetcode做题笔记47

给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思路一&#xff1a;回溯 int* Source NULL; int Source_Size 0;int** Result NULL; int* Retcolsizes NULL; int Result_Index 0;int* Path NULL; int Path_Index 0;bool* Used …...

Linux Day04

目录 一、文件压缩与解压命令 1.1 tar cvf 文件名 ---打包命令生成.tar 1.2 tar xvf 文件名 ----解开包 生成文件 1.3 gzip .tar 压缩 生成.tar.gz压缩包 1.4 gzip -d .tar.gz 解压成包 1.5 直接把压缩包解压成文件 tar zxf .tar.gz 二、Linux 系统上 C 程序的…...

上海亚商投顾:沪指冲高回落 两市成交重回万亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日冲高回落&#xff0c;盘初一度集体涨超1%&#xff0c;随后涨幅明显回落&#xff0c;上证50午后一度翻…...

2023最新版本~十分钟零基础搭建EMQX服务器

购买服务器 已知服务器大厂商 1 阿里云 点击直接访问 2 华为云点击直接访问 3 腾讯云 点击直接访问 还是比较推荐大公司 不会跑路 这里我购买的是一年的华为云服务器(新用户 64一年) 镜像推荐乌班图18 登陆服务器&#xff08;需要重置密码&#xff01;&#xff01;&…...

SpringBoot2.5.6整合Elasticsearch7.12.1

SpringBoot2.5.6整合Elasticsearch7.12.1 下面将通过SpringBoot整合Elasticseach&#xff0c;SpringBoot的版本是2.5.6&#xff0c;Elasticsearch的版本是7.12.1。 SpringBoot整合Elasticsearch主要有三种方式&#xff0c;一种是通过elasticsearch-rest-high-level-client&am…...

准大一信息安全/网络空间安全专业学习规划

如何规划&#xff1f; 学习需要一个良好的学习习惯&#xff0c;建议刚开始一定要精通一项程序语言&#xff0c;学习其他的就会一通百通。过程中是按步骤学习&#xff0c;绝不半途看见苹果丢了梨&#xff0c;一定要强迫自己抵制新鲜技术的诱惑。 网络安全其实是个广而深的领域…...

WEB:php_rce

背景知识 Linux命令 thinkPHPv5漏洞 题目 打开页面&#xff0c;页面显示为thinkphp v5的界面&#xff0c;可以判断框架为thinkPHP&#xff0c;可以去网上查找相关的漏洞 由题目可知&#xff0c;php rec是一个通过远程代码执行漏洞来攻击php程序的一种方式 因为不知道是php版…...

问题:idea启动项目错误提示【command line is too long. shorten command line】

问题&#xff1a;idea启动项目错误提示【command line is too long. shorten command line】 参考博客 问题描述 启动参数过长&#xff0c;启动项目&#xff0c;错误提示 原因分析 出现此问题的直接原因是&#xff1a;IDEA集成开发环境运行你的“源码”的时候&#xff08…...

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04 一、安装linux子系统 1.1、 启动或关闭Windows功能-适用于Linux的Windows子系统 1.2 WSL 官方文档 使用 WSL 在 Windows 上安装 Linux //1-安装 WSL 命令 wsl --install//2-检查正在运行的 WSL 版本&#xff1a;…...

子域名收集工具OneForAll的安装与使用-Win

子域名收集工具OneForAll的安装与使用-Win OneForAll是一款功能强大的子域名收集工具 GitHub地址&#xff1a;https://github.com/shmilylty/OneForAll Gitee地址&#xff1a;https://gitee.com/shmilylty/OneForAll 安装 1、python环境准备 OneForAll基于Python 3.6.0开发和…...

报数游戏、

描述 有n人围成一圈&#xff0c;顺序排号。从第1个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来的第几号的那位。。 输入 初始人数n 输出 最后一人的初始编号 输入样例 1 3 输出样例 1 2 输入样例 …...

规约模式:优雅设计与灵活应用

引言&#xff1a; 规约模式是软件开发中的重要设计原则&#xff0c;它们提供了一种优雅的、灵活的方式来构建高质量的系统。本文将通过实例演示规约模式的具体应用&#xff0c;带你了解这些原则的实战价值。 一、开放封闭原则 // 图形接口 public interface Shape {void dra…...

Ubuntu Server版 之 apache系列 安装、重启、开启,版本查看

安装之前首先要检测是否安装过 apt list --installed | grep tool tool&#xff1a;要检测的名称&#xff0c;如mysql、apache 、ngnix 等 安装 apache sudo apt install apache2 安装apache 默认是开启的 可以通过浏览器 检测一下 service apache stop # apache 停止服务…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...