android studio版本:21.2.1
例程:newareaautov1
和风天气字体图标使用方法见:
android 显示和风天气字体图标_kim5659的博客-CSDN博客_qweather-icons
之前做了个全自动获取天气的app,用的是墨迹的接口(实际是科大讯飞再接入墨迹的数据)。
http://autodev.openspeech.cn/csp/api/v2.1/weather?openId=aiuicus&clientType=android&sign=android&city=深圳&latitude=" + lat + "&longitude=" + lon + "&needMoreData=true&pageNo=1&pageSize=3
(经测试,上面地址获取天气的方法,天气只显示白天的图标,晚上图标也是白天的,夜间多云不会显示月亮还是太阳,不过问题不大,不影响使用。2022.12.14)
可以获取到天气并正常显示,但没有天气图标,看起来不爽,但网上关于墨迹的资料很少,更别说关于天气图标的事了。我看了一下获取的墨迹的json数据,与官方的又不太一样,官方的有icon字段,但上面地址获取的数据没有。但有一个weatherType字段,我高度怀疑它就是天气图标代码。但要怎么证明它就是也是花了不少时间。我到阿里云上0元购买了墨迹天气服务。下载了墨迹接口文档,里面刚好有“天气图标对照表”刚好是我需要的。
打开之后这样:
这个正是我需要的,而且里面也有图标png文件,
如果会用png文件显示图标的,直接就可以用了。但我不会,而且我还是喜欢字体文件多些,虽然不太好看。但墨迹好像不提供字体文件,也就用不了,只好把和风的移植过来。其实只要找到对应关系就行了。费点时间而已,经过几个小时的对照,做出了对照表,并实验成功。
对照表大致这样:
其实墨迹的图标要比和风的少很多,只有30个图标(白天晚上一共),而且有些虽然是白天晚上不同的代码,但图标还是一个。
把它做成json文件后这样:
String tubiao="{" +
"'0':'','30':'','2':''," +
"'1':'','31':'','3':'','33':''," +
"'19':'','9':'','10':''," +
"'5':'','7':'','8':''," +
"'16':'','17':'','6':''," +
"'13':'','34':'','14':''," +
"'18':'','32':'','15':''," +
"'45':'','46':'','29':'','35':''," +
"'20':'','36':'','4':''}" ;
'0':''; 0表示的是天气图标代码,是天气图标字体,至于为什么这样写不也不知道,当初也研究了很久。因为墨迹用的是一个字段存放天气图标代码,不像和风分为白天(iconday)和晚上(iconnight)两个,所以所有天所图标代码放一起就行了,而和风要判断当前是白天还是晚上,要找不同的图标,这点来讲,墨迹更方便科学一点。
解码及显示代码如下:
try {
JSONObject jsonObjectIcon = new JSONObject(tubiao);
String Night=jsonObjectIcon.getString(weathertype);
icon.setText(Html.fromHtml(Night));
} catch (Exception e) {
icon.setText(Html.fromHtml(""));//如果未找到则显示N/A
}
要提到一点,weatherType,在json里面是数型,要进行转换,否则找不到数据。
int weathertype0=jsonObject0.getInt("weatherType"); String weathertype=Integer.toString(weathertype0);
完成后这样:
这个界面就跟和风的一样了,但这个接口能用多久不知道,所以稳定还是要和风。