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

相关推荐
QING61828 分钟前
Kotlin Random.Default用法及代码示例
android·kotlin·源码阅读
QING61829 分钟前
Kotlin Byte.inc用法及代码示例
android·kotlin·源码阅读
QING61834 分钟前
Kotlin contentEquals用法及代码示例
android·kotlin·源码阅读
每次的天空9 小时前
Android学习总结之算法篇四(字符串)
android·学习·算法
x-cmd10 小时前
[250331] Paozhu 发布 1.9.0:C++ Web 框架,比肩脚本语言 | DeaDBeeF 播放器发布 1.10.0
android·linux·开发语言·c++·web·音乐播放器·脚本语言
tangweiguo0305198713 小时前
Android BottomNavigationView 完全自定义指南:图标、文字颜色与选中状态
android
遥不可及zzz14 小时前
Android 应用程序包的 adb 命令
android·adb
无知的前端14 小时前
Flutter 一文精通Isolate,使用场景以及示例
android·flutter·性能优化
_一条咸鱼_14 小时前
Android Compose 入门之字符串与本地化深入剖析(五十三)
android
ModestCoder_15 小时前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人