您的位置:首页 > 其它

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

2015-05-28 23:02 375 查看
1、网络框架方面直接借用了开源的网络框架volley,可实现网络请求的排序队列

详细信息可以看:

项目地址 https://github.com/smanikandan14/Volley-demo
(1) JSON,图像等的异步下载;

(2) 网络请求的排序(scheduling)

(3) 网络请求的优先级处理

(4) 缓存

(5) 多级别取消请求

(6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

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

/article/1355126.html

当然还有很多的资料,大同小异
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: