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

1.新建工程项目WeatherForecast。

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

XML 复制代码
<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整个工程。

Groovy 复制代码
implementation 'com.google.code.gson:gson:2.10.1'

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

java 复制代码
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);

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

java 复制代码
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);

获取数据的代码如下:

java 复制代码
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()更新界面控件:

java 复制代码
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

相关推荐
独行soc10 分钟前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码203540 分钟前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_9151063240 分钟前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
vistaup1 小时前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵1 小时前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动1 小时前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
熊猫钓鱼>_>1 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
Rainman博11 小时前
WMS-窗口relayout&FinishDrawing
android
baidu_2474386114 小时前
Android ViewModel定时任务
android·开发语言·javascript
有位神秘人14 小时前
Android中Notification的使用详解
android·java·javascript