mark-使用volley以及百度定位获取天气

1、网络框架方面直接借用了开源的网络框架volley,可实现网络请求的排序队列

详细信息可以看:

项目地址 https://github.com/smanikandan14/Volley-demo
 (1)  JSON,图像等的异步下载;
 (2)  网络请求的排序(scheduling)
 (3)  网络请求的优先级处理
 (4)  缓存
 (5)  多级别取消请求
 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

关于使用方法,可以自己去看源码或者参看别人的博客比如:

http://blog.csdn.net/xyz_lmn/article/details/12165391

当然还有很多的资料,大同小异

2、关于获取天气的方度娘说了很多,大都跟解析json、读取中国气象局网站(需需要先获取城市列表,再一级一级的找城市代码,最终组成uri请求天气),总觉着太繁琐,看到有人用新浪的天气接口来获取天气预报,只要将城市名称直接组成uri就可以。。。。。。。感觉很简单的样子

首先借助百度地图实现地理位置定位,这个不会的可以直接度娘

关于如何通过百度地图获取地理位置我这里不再赘述

直接写我认为关键的volley获取数据部分 

	
private utf8StringRequest mutf8StringRequest;//子类继承StringRequest,稍后再说为什么
private void getWheatherByVolley(String city){
		 mContext = this;
		 System.out.println("请求结果100:" + city);
		 final String result = null;
		 try {
			city = java.net.URLEncoder.encode(city,  "gb2312");//必须转码,否侧新浪不认识,返回的数据将显示为空值
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 String url="http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city="+city+"&dfc=3";
	        //String url = "http://www.aplesson.com/";
	        // 1 创建RequestQueue对象
	        mRequestQueue = Volley.newRequestQueue(mContext);
	        // 2 创建StringRequest对象
	        mutf8StringRequest = new utf8StringRequest(url,
	                new Response.Listener<String>() {
	                    @Override
	                    public void onResponse(String response) {
	                        System.out.println("请求结果:" + response);
	                        String re = response;
	                        dealResult(re);//对返回的数据进行接卸,可以通过上边的打印语句查看返回信息
	                    }
	                }, new Response.ErrorListener() {
	                    @Override
	                    public void onErrorResponse(VolleyError error) {
	                        System.out.println("请求错误:" + error.toString());
	                    }
	                });
	        // 3 将StringRequest添加到RequestQueue
	        
	        mRequestQueue.add(mutf8StringRequest);
		
	}
	

为什么要继承StringRequest,而不是直接使用StringRequest作为返回结果呢,不相信的可以尝试直接使用StringRequest,打印结果将是汉字乱码!!有木有

有兴趣的童鞋可以查看volley源码

上方法,实现一个子类继承StringRequest,复写parseNetworkResponse

/**
 * 这个类很重要,由于编码的原意,必须对汉字进行编码才不会出现乱码
 * @author sunfengqi
 *
 */
public class utf8StringRequest extends StringRequest{

	public utf8StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
		super(url, listener, errorListener);
		// TODO Auto-generated constructor stub
	}

	  @Override
	    protected Response<String> parseNetworkResponse(NetworkResponse response) {
	        // TODO Auto-generated method stub
	        String str = null;
                //<span style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; white-space: inherit; color: rgb(34, 34, 34); font-size: 13px;">String jsonString = new String(response.data, "gb2312");//方法1</span>
	        try {
	            str = new String(response.data,"gb2312");//妹的为什么utf-8不行,难道新浪端只认识gb2312
	        } catch (UnsupportedEncodingException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
	        return Response.success(str, HttpHeaderParser.parseCacheHeaders(response));
	    }

}
ok!剩下的就是数据解析和呈现了。。。。。。
源码下载地址: http://download.csdn.net/detail/sfq19881224/8749957



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值