Android集成高德天气API 天气预报

news2024/11/28 10:55:35

1.新建工程项目WeatherForecast。

2.在AndroidManifest文件中添加网络访问相关权限。

<uses-permission android:name="android.permission.INTERNET"/>

3.设计页面布局activity_main.xml,界面效果如图所示。

4.注册高德开放平台,查阅天气查询API文档,通过API文档可以知道要使用该API必须先申请“Web服务 API”密钥(Key),Key将作为HTTP GET请求URL的参数,接收HTTP请求返回的数据为JSON类型数据。文档中也给出了请求URL地址和JSON数据样例。

5.申请“Web服务”API Key。打开高德开放平台的控制台页面,单击左边栏的应用管理→我的应用→创建新应用,如图所示。

在弹出的新建应用窗口中输入应用名称和应用类型,如图所示。

新建应用完成后将出现如图所示界面,此时还需要添加Key才能使用,单击添加Key将弹出如图所示窗口,填写Key名称,勾选Web服务,阅读并同意相关协议,单击提交,即可生成Key。

6.根据JSON样例,生成天气Bean。首先使用计算机上的浏览器测试HTTP GET请求,请求成功将拿到JSON样例。Android Studio中打开菜单File→Settings→Plugins,搜索并安装GsonFormat插件。插件安装完成后,在Java src目录右击New→Java Class,新建WeatherBean.java,在该文件中右击Generate→GsonFormat,在弹出的窗口中将JSON样例粘贴上去,单击OK,即可生成JSON对应的Bean,这里需要将代码中出错的注解删掉。

7.实现MainActivity类的逻辑,MainActivity需要请求并解析数据。首先在build.gradle中添加GSON的依赖,添加完依赖后需要重新sync整个工程。

implementation 'com.google.code.gson:gson:2.10.1'

MainActivity类中首先初始化界面控件,找到需要更新的界面控件:

textViewProvince = findViewById(R.id.textViewProvince);
textViewCity = findViewById(R.id.textViewCity);
textViewReporttime = findViewById(R.id.textViewReporttime);
textViewTemperature = findViewById(R.id.textViewTemperature);
imageViewWeather = findViewById(R.id.imageViewWeather);

随后开启一个子线程请求并解析数据,子线程中请求数据的代码如下:

String path = "https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=" + URLEncoder.encode(key);
URL url = new URL(path);
//创建 URL对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式
conn.setRequestMethod("GET");
//设置超时时间
conn.setConnectTimeout(5000);

获取数据的代码如下:

int responseCode = conn.getResponseCode();
//获取状态码
if (responseCode == 200) {//访问成功
    byte[] buffer = new byte[1024];//创建接收缓冲区
    InputStream is = conn.getInputStream();//获取服务器的返回流
    int len = is.read(buffer);
    if (len!=0){
        String json1 = new String(buffer,0,len);
}

解析并显示数据的代码如下,使用gson.fromJson()方法解析数据,调用runOnUiThread()更新界面控件:

Gson gson =new Gson ();
WeatherBean weatherBean = gson.fromJson(json1,WeatherBean.class);
Log.e("ss",weatherBean.getStatus()+weatherBean.getLives().toString());
if (weatherBean.getStatus().equals("1")){
    List<WeatherBean.LivesDTO> lives = weatherBean.getLives();
    WeatherBean.LivesDTO livesDTO = lives.get(0);
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textViewProvince.setText(livesDTO.getProvince());
            textViewCity.setText(livesDTO.getCity());
            textViewTemperature.setText(livesDTO.getTemperature());
            textViewReporttime.setText(livesDTO.getReporttime());
            if (livesDTO.getWeather().equals("多云")){
imageViewWeather.setImageResource(R.drawable.baseline_cloud_queue_24);
            }else if (livesDTO.getWeather().equals("晴")) {
imageViewWeather.setImageResource(R.drawable.baseline_wb_sunny_24);
            }
        }
    });

高德天气预报Android HTTP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码签名证书有什么作用?有哪些申请步骤?

代码签名证书是一种数字证书&#xff0c;它为软件开发者提供一种验证软件代码真实性和完整性的方法。通过使用代码签名证书&#xff0c;开发者可以确保他们的软件在发布后没有被篡改&#xff0c;并且用户可以信任软件的来源。 什么是代码签名证书&#xff1f; 代码签名证书是提…

小程序 UI 设计缔造独特魅力

小程序 UI 设计缔造独特魅力

【面试干货】抽象类的意义与应用

【面试干货】抽象类的意义与应用 1、为其他子类提供一个公共的类型2、封装子类中重复定义的内容3、定义抽象方法&#xff0c;子类虽然有不同的实现&#xff0c;但是定义时一致的4、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在…

jrebel安装使用教程(2022.4.1版本)

本方法适用于jrebel2022.4.1版本&#xff0c;之后的版本不再适用。 1.下载插件 下载地址 2.安装插件 可以通过idea内部安装 也可以将插件解压进idea的安装目录下的plugins。 3.激活 Team URL中填入 https://jrebel.qekang.com/{guid}这里提供两个guid生成地址&#xf…

【AI工作流-AI-Agent】FastGPT新建应用并用openai接口调用

FastGPT 简介 FastGPT是一个AI工作流搭建平台&#xff0c;它是一个开源框架&#xff0c;支持聊天&#xff0c;RAG&#xff08;知识库&#xff09;&#xff0c;工作流编排。 缺点是不支持AI搜索&#xff0c;模型支持需要依赖于第三方部署框架例如oneapi&#xff0c;ollama等。…

aardio - 【库】lock 跨进程读写锁

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right272;bottom203;topmost1) winform.add( button{cls"button";text"无锁演示";left27;top132;right120;bottom184;z2}; button2{cls"button";text"有锁演示…

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中&#xff0c;营销组合建模&#xff08;Marketing Mix Modeling&#xff0c;MMM&#xff09; 被用于预测广告商家的总商品交易量&#xff08;GMV&#xff09;&#xff0c;并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

修复 Android 手机卡在启动屏幕上的 7 种方法

Android 手机卡在启动屏幕上的情况并不常见。通常&#xff0c;问题出现在应用新更新或安装未知来源的应用程序后。幸运的是&#xff0c;您可以让您的 Android 手机跳过启动屏幕&#xff0c;而无需前往最近的服务中心。 当您的 Android 手机在启动屏幕上陷入无限循环时&#xf…

MSPM0G3507——PWM

在sysconfig中&#xff0c;左侧可以选择MCU的外设&#xff0c;我们找到并点击TIMER-PWM选项卡&#xff0c;在TIMER-PWM中点击ADD&#xff0c;就可以添加定时器下的PWM外设。 这里设置通道0为100Hz的频率&#xff0c;0%占空比的PWM&#xff0c;周期计数值为1000&#xff0c;比较…

有哪些骨传导耳机是比较推荐入手的?精选五款热门骨传导耳机推荐!

耳机基本是每人人手一台&#xff0c;不管是在地铁上还是在公交上&#xff0c;都可以看到很多人戴着耳机度过空余的时光&#xff0c;甚至现在人们在耳机的选择方面更加偏向于骨传导耳机&#xff0c;开放耳道的奇特设计在户外佩戴的时候可以更好的感知到周围的环境音&#xff0c;…

面试突击:深入理解 Java 中的异常

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。今天想和大家聊聊 Java 中的异常。异常处理是一种重要的概念&#xff0c;因为程序总是会出现各种意料之外的问题&…

分享计算机msvcp100.dll,丢失或找不到的7个解决方法

msvcp100.dll是动态链接库文件对于执行使用 Microsoft Visual C 2010 编译器编译的应用程序至关重要。它包含了 C 标准库的实现&#xff0c;提供了应用程序运行时所需的核心功能&#xff0c;如输入/输出操作、字符串处理、数学运算和异常处理等。若系统中缺失或损坏此文件&…

win10环境配置ollama-ui运行llama3模型

先说我的笔记本电脑配置intel-i7-11390h,4核8处理器&#xff0c;内存16G。显卡NVIDA GeFroce MX450&#xff0c;2G显存&#xff0c;这是一台5000元左右的电脑。 我用它跑roop、sd1.5、ffusion2、ChatTTs还有pythonpytorch的自定义模型&#xff0c;现在用来跑llama3。当然&…

挑战Midjourney,融合近百个SD大模型的通用模型AlbedoBase XL

在SDXL的通用模型中&#xff0c;DreamShaperXL和juggernautXL这2款大模型一直都深受广大AI绘画者的喜爱&#xff0c;不可否认&#xff0c;这2款通用模型在很多方面表现都相当出色。 今天再给大家介绍一款基于SDXL的通用大模型&#xff1a;AlbedoBase XL&#xff0c;作者的目标…

Centos7 Mysql8.3.0 安装地址

MySQL :: Download MySQL Community Server (Archived Versions)

qt 5.6 qmake手册

qt 5.6 qmake手册 &#xff08;笔者翻译的qmake手册&#xff0c;多数是机翻&#xff0c;欢迎评论区纠错修正&#xff09; Qmake工具有助于简化跨不同平台开发项目的构建过程。它自动生成Makefile&#xff0c;因此创建每个Makefile只需要几行信息。您可以将qmake用于任何软件项目…

解决 执行 jar 命令 控制台乱码

Springboot项目&#xff0c;编码为utf8 打包后&#xff0c;为了在控制台运行时不乱码&#xff0c;需要在控制台中依次执行以下命令&#xff1a; 第一步&#xff1a; chcp 65001第二步&#xff1a; java -jar -Dfile.encodingutf-8 你的.jar

使用 GitOps 进行防灾 MinIO

想象一下&#xff0c;您已经花费了无数小时来完善 Docker Swarm 设置&#xff0c;精心设计每项服务&#xff0c;并调整 CI/CD 管道以实现无缝自动化。现在&#xff0c;想象一下这个经过微调的系统被重置为原点&#xff0c;不是因为严重的故障或安全漏洞&#xff0c;而是因为数据…

windows下mysql修改 my.ini的datadir后 `Access denied`

1. 背景 window安装mysql数据库时,不能指定数据文件存放位置(默认安装路径 "C:/ProgramData")。 只能通过修改mysql.ini来更改数据文件存放目录。 2. 问题: 修改mysql.ini后,mysql 出现 "Access denied for user ‘root‘@‘localhost‘ (using passwor…

如何清除anaconda3缓存?

如果长期使用anaconda不清理缓存&#xff0c;会导致anaconda占用磁盘空间越来越多&#xff0c;甚至系统磁盘撑爆。 清除包缓存&#xff1a; 打开 Anaconda Prompt 或者命令行窗口。运行以下命令清除包缓存&#xff1a;conda clean --all这会清除所有的包缓存&#xff0c;释放磁…