赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。