中国气象局接口提供了一个地址,里面是当天的天气状况,数据的格式是Json,Json数据是一串用大括号包住的,里面是一个个键值对的字符串。键名:键值,我需要当天的数据格式,如何从Json数据取出我所要的信息呢,Java提供了一个类:JsonObject
JSONObject json=new JSONObject(r.getResult());
JSONObject weatherinfo = json.getJSONObject("weatherinfo");
city.setCity(weatherinfo.getString("city"));
我可以用它的getString方法获取我想要键名对应的键值,放入City对象中,接下来就是联网操作的工作了。
HttpGet httpGet = new HttpGet("http://m.weather.com.cn/atad/" + cityID + ".html");
联网有httpGet和httpPose两种方法,前者把数据封装在URL中,后者封装在网址的body中(应该是吧.....),这里我用了httpGet方法
<span style="font-size:12px;">httpResponse = httpClient.execute(httpGet);
//httpResponse为响应
httpEntity = httpResponse.getEntity();
//httpEntity为内容
inputStream = httpEntity.getContent();
//inputStream为内容的响应流</span>
所谓联网,就是向网站发送一条请求信息,如果请求成功,网站会返回一串响应数据,然后连接断开,客户端通过解析操作将信息以图片,链接,文字等形式展现在屏幕上,让客户操作,气象局接口也是这样,当你发送了请求后,该网站会返回一个响应数据,我们获取它的内容后得到它的响应流(至于是什么格式的请原谅我也不清楚...)
<span style="font-size:12px;">BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while((line = reader.readLine()) != null){
result = result + line;
}</span>
用BufferedReader这个类去解析它,最终将Json格式存放进这个result的字符串中,就可以调用JsonObject来获取它里面的信息了。因为需要修改界面的控件,所以需要一个handler机制去发送消息,通知主界面在主线程中更新UI
Message msg1 = new Message();
Bundle b1 = new Bundle();//存放数据
b1.putString("result", result);
msg1.setData(b1);
MainInterface.handlerGuangzhou.sendMessage(msg1);
这样,查询广州天气功能就实现了。