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

相关推荐
花生糖@30 分钟前
Android XR 应用程序开发 | 从 Unity 6 开发准备到应用程序构建的步骤
android·unity·xr·android xr
是程序喵呀34 分钟前
MySQL备份
android·mysql·adb
casual_clover36 分钟前
Android 之 List 简述
android·list
锋风Fengfeng2 小时前
安卓15预置第三方apk时签名报错问题解决
android
User_undefined2 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app
程序员厉飞雨3 小时前
Android R8 耗时优化
android·java·前端
丘狸尾5 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器
van叶~7 小时前
探索未来编程:仓颉语言的优雅设计与无限可能
android·java·数据库·仓颉
Crossoads11 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
li_liuliu12 小时前
Android4.4 在系统中添加自己的System Service
android