当前位置:   article > 正文

小型天气预报Android,利用心知天气api实现

心知天气api

Json 是一种有一定顺序的数组/对象。Json对象就是多个属性被{}括起来的,下面就是我利用心知天气api生成的北京的未来两天的天气的json对象。

下面我利用json格式化工具,将其格式化 为了便于阅读和理解,也为了后面的解析数据。

心知天气api:

心知天气开放控制台:https://www.seniverse.com/dashboard

申请自己的私钥,你就可以使用心知天气的api了

只要在浏览器按照格式输入下面的接口地址,就可以生成上面的json数组对象。

而这个安卓项目就是基于心智天气api所生成的json而开发的。

好了,进入项目 先看看xml布局文件,这里定义了大量的textview,每个编上id和text

各个所要显示的数据信息,指数各不相同。

整个页面分为四个部分,顶部的输入框和查询按钮、实况天气、未来两天天气以及五个生活指数。还用了一个ScollView形成了一个侧边划动栏的样式。值得一提的是,这里面的布局是互相嵌套的。最外层的Linearlayout线性布局中嵌套了四个Relativelayout相对布局。

在build.Gradle的dependencies{}中添加如下代码,添加后记得同步Gradle文件

在AndroidManifest文件中声明网络权限

在Java文件中,首先把刚才放置的控件都进行声明,同时也声明一个与其同名的String类型的变量,用于接收json中返回的值。

紧接着重写onCreate方法,绑定xml文件,然后在这里将所有控件绑定,并提取成init方法。

唯一的按钮绑定了onClick方法,如果按钮被点击,就会执行sendRequestWithOkHttp方法,在这个方法中,用匿名内部类新建了三个线程,,在线程运行的过程中,先创建了一个okhttp实例,它是一个处理网络请求的开源插件,分为get和post请求,我们将get请求直接写在url后面,注意,这里把url一分为二,中间需要填地址的部分,我用字符串拼接了提前写好的从edittext获取的String。这样可以实现查询的功能, 这样我们按下按钮的时候就相当于向浏览器请求了一次天气数据,不过这个方法显示的是原始的json数据。

ShowResponse()方法的作用就是将要显示的数据显示在相应的textview之后,便于用户使用和获取信息。

接下来执行parseJSONWithJSONObject,它的参数是刚刚得到的json数据。这里我们用jsonObject类,层层解析json数据,以实况天气为例:用jsonArray得到results数组对象,results数组(jsonArray类型)的0索引中又有now和location两个集合。results.getJSONObject(0).getJSONObject("now"),这样就分别得到了location对象(类型为jsonobject)和now对象,接着继续用getString分别得到天气,城市名以及温度。

生活指数和未来天气也大同小异,只需要针对json数据,层层解析,就可以得到想要的信息。

缺点:

①、所有代码都写在了主类中,严重影响代码运行速度。

②、与其说是天气预报,不如说是一个json数据解析器。

源码:链接:https://pan.baidu.com/s/1saUCiy0JmZRy0nuVpVaFzQ 
提取码:meli

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/693354
推荐阅读
相关标签
  

闽ICP备14008679号