高德天气应用开发之二:android 高德天气API说明及城市天气查询实现

版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/86665655

项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!

基于MVVM框架的高德天气APP:

功能点实现说明:

  • 高德天气查询:Get&Post方式可以正常返回查询高德天气数据并UI显示;

一、 高德天气官方API:

链接:https://lbs.amap.com/api/webservice/guide/api/weatherinfo/

1. 开发步骤:

使用说明

第一步,申请”web服务 API”密钥(Key);

第二步,拼接HTTP请求URL,第一步申请的Key需作为必填参数一同发送;

第三步,接收HTTP请求返回的数据(JSON或XML格式),解析数据。

如无特殊声明,接口的输入参数和输出数据编码全部统一为UTF-8。

2. 天气查询语法:

天气查询

天气查询API服务地址:

URL

https://restapi.amap.com/v3/weather/weatherInfo?parameters

请求方式

GET

parameters代表的参数包括必填参数和可选参数。所有参数均使用和号字符(&)进行分隔。下面的列表枚举了这些参数及其使用规则。 

  • 请求参数

参数名

含义

规则说明

是否必须

缺省值

key

请求服务权限标识

用户在高德地图官网申请web服务API类型KEY

必填

city

城市编码

输入城市的adcode,adcode信息可参考城市编码表

必填

extensions

气象类型

可选值:base/all

base:返回实况天气

all:返回预报天气

可选

output

返回格式

可选值:JSON,XML

可选

JSON

3.  返回的数据格式:

  • 返回结果参数说明

实况天气每小时更新多次,预报天气每天更新3次,分别在8、11、18点左右更新。由于天气数据的特殊性以及数据更新的持续性,无法确定精确的更新时间,请以接口返回数据的reporttime字段为准。天气结果对照表>>

名称

含义

规则说明

status

返回状态

值为0或1

1:成功;0:失败

count

返回结果总数目

info

返回的状态信息

infocode

返回状态说明,10000代表正确

lives

实况天气数据信息

province

省份名

city

城市名

adcode

区域编码

weather

天气现象(汉字描述)

temperature

实时气温,单位:摄氏度

winddirection

风向描述

windpower

风力级别,单位:级

humidity

空气湿度

reporttime

数据发布的时间

forecast

预报天气信息数据

city

城市名称

adcode

城市编码

province

省份名称

reporttime

预报发布时间

casts

预报数据list结构,元素cast,按顺序为当天、第二天、第三天的预报数据

date

日期

week

星期几

dayweather

白天天气现象

nightweather

晚上天气现象

daytemp

白天温度

nighttemp

晚上温度

daywind

白天风向

nightwind

晚上风向

daypower

白天风力

nightpower

晚上风力

 

4. 高德天气城市配置表:

链接:http://a.amap.com/lbs/static/file/AMap_adcode_citycode.xlsx.zip

5. 请求&返回数据举例:

//restapi.amap.com/v3/weather/weatherInfo?key=您的key&city=110101

{

  • "status" :"1",
  • "count" :"1",
  • "info" :"OK",
  • "infocode" :"10000",
  • "lives" :[
    • "0" :{
      • "province" :"北京",
      • "city" :"东城区",
      • "adcode" :"110101",
      • "weather" :"晴",
      • "temperature" :"4",
      • "winddirection" :"东南",
      • "windpower" :"≤3",
      • "humidity" :"26",
      • "reporttime" :"2019-01-27 13:51:08"
      }
    ]

}

二、 代码实现:

备注:项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!

1.  查询城市天气请求封装:

/*高德天气:当前天气查询接口 Post*/
public Observable<LiveWeatherResponseData> liveWeatherPost(final String adcode) {
    return apiService.livesweatherPost(adcode,
            ApiContants.AMAP_USER_KEY_VALUE,
            ApiContants.AMAP_USER_EXTENSION_VALUE_BASE,
            ApiContants.AMAP_USER_OUTPUT_VALUE)
            .subscribeOn(Schedulers.io());
}

/*高德天气:预报天气查询接口 Post*/
public Observable<AllForecastResponseData> forecastWeatherPost(final String adcode) {
    return apiService.allweatherPost(adcode,
            ApiContants.AMAP_USER_KEY_VALUE,
            ApiContants.AMAP_USER_EXTENSION_VALUE_ALL,
            ApiContants.AMAP_USER_OUTPUT_VALUE)
            .subscribeOn(Schedulers.io());
}

2. 请求发起&返回数据解析:

public void queryCityWeather(final CityBean cityinfo) {
    Observable<LiveWeatherResponseData> observable1 =
            WeatherRequestClient.getInstance().liveWeatherPost(cityinfo.adcCode).subscribeOn(Schedulers.io());

    Observable<AllForecastResponseData> observable2 =
            WeatherRequestClient.getInstance().forecastWeatherPost(cityinfo.adcCode).subscribeOn(Schedulers.io());

    Observable.zip(observable1, observable2,
            new BiFunction<LiveWeatherResponseData, AllForecastResponseData, ArrayList<BaseItemBean>>() {
                @Override
                public ArrayList<BaseItemBean> apply(LiveWeatherResponseData livedata,
                                                     AllForecastResponseData allForecastdata) throws Exception {
                    List<DayForecastBean> dayForecastList = null;
                    ArrayList<BaseItemBean> dataList = new ArrayList<>();

                    dataList.clear();
                    if (livedata != null && livedata.isSuccessful()) {
                        dataList.add(livedata.getWeatherLiveResult());
                    }
                    if (allForecastdata != null
                            && allForecastdata.isSuccessful()
                            && allForecastdata.getWeatherAllResult() != null) {
                        dayForecastList = allForecastdata.getWeatherAllResult().dayForecastBeanList;
                    }

                    for (DayForecastBean fdata : dayForecastList) {
                        dataList.add(fdata);
                    }

                    return dataList;
                }
            }).observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<List<BaseItemBean>>() {
                @Override
                public void accept(List<BaseItemBean> dataList) throws Exception {
                    mCityWeatherDatas.put(cityinfo,dataList);
                    CityWeatherRecyclerAdapter adapter = getCityWeatherRecyclerAdapter(cityinfo);
                    adapter.setAdapterData(dataList);
                }
            });
}

具体实现细节,可参照源码,如有疑问和不妥之处,请不吝指教,谢谢!

-------------------------------------------

文章目录(未完,待续):

一:android 应用子功能及移动框架总述 https://blog.csdn.net/cbk861110/article/details/86665564

二:android 高德天气API说明及城市天气查询实现 https://blog.csdn.net/cbk861110/article/details/86665655

三:android 自定义控件实现(ActionBar + PageIndicatorView) https://blog.csdn.net/cbk861110/article/details/86665790

四:android ViewPager实现左右页面滑动切换 https://blog.csdn.net/cbk861110/article/details/86665964

五:android应用权限动态申请 https://blog.csdn.net/cbk861110/article/details/86666321

六:android RecyclerView 封装及使用 https://blog.csdn.net/cbk861110/article/details/86666392

七:android Xutils3文件下载实现(高德天气城市配置) https://blog.csdn.net/cbk861110/article/details/86666573

八:android DiskLruCache 磁盘缓存 封装和使用 https://blog.csdn.net/cbk861110/article/details/86666664

九:android ThreadPoolExecutor线程池 封装及使用  https://blog.csdn.net/cbk861110/article/details/86667101

十:android 天气网络请求框架(retrofit2&okhttp3&Gson) 封装及使用  https://blog.csdn.net/cbk861110/article/details/86667375

十一:android RxAndroid(响应式编程) 异步网络请求实现 https://blog.csdn.net/cbk861110/article/details/86669178

十二:android DataBinding 数据和UI双向绑定实现 https://blog.csdn.net/cbk861110/article/details/86669708

十三:android room数据库 天气数据读写实现 https://blog.csdn.net/cbk861110/article/details/86670354

十四:android LiveData 使用方法(实现城市天气自动刷新) https://blog.csdn.net/cbk861110/article/details/86670531

十五:android ViewModel 使用方法 https://blog.csdn.net/cbk861110/article/details/86670703

十六:android 集成友盟消息推送机制(U-Push) https://blog.csdn.net/cbk861110/article/details/86683849

--------------------- 

【版权说明】

1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564

2. 项目源码&框架说明&技术更新实现 请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!

猜你喜欢

转载自blog.csdn.net/cbk861110/article/details/86665655