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获取数据部分
为什么要继承StringRequest,而不是直接使用StringRequest作为返回结果呢,不相信的可以尝试直接使用StringRequest,打印结果将是汉字乱码!!有木有
有兴趣的童鞋可以查看volley源码
上方法,实现一个子类继承StringRequest,复写parseNetworkResponse
源码下载地址:http://download.csdn.net/detail/sfq19881224/8749957
详细信息可以看:
项目地址 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>ok!剩下的就是数据解析和呈现了。。。。。。
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));
}
}
源码下载地址:http://download.csdn.net/detail/sfq19881224/8749957
相关文章推荐
- android 初识ViewPager
- 正则表达式速读理解技巧
- Leetcode: Word Frequency (shell , awk)
- APUE-CH3 文件IO(2)
- !hdu 4091--贪心、枚举--(思维)
- List::traverse遍历
- (1) 如何用Apache POI操作Excel文件-----入门
- 不用装软件-不用任何插件-在PC上下载Google play的apk
- 去掉xcode源码末尾的空格
- JS阻止冒泡方法
- (算法)判断两个区间是否重叠
- SharePoint 沙盒无法启动新的解决方案服务的SPUserCodeV4
- WAS中单元(Cell)节点(Node),以及Node、Profile 与 Server 之间的关系是什么
- 第三章 第四十题
- Alpha版使用说明书
- 《你的灯还亮着吗?》读后感(二)
- D 矩阵快速幂
- 浅谈iOS面向对象之类与对象
- jquery基础知识
- JavaDome