安卓新的联网方式 Volley的使用(一)加载图片与 json
最近刚接触安卓, 以前搞wp ,一对比起来 ,安卓怎么这么麻烦。联网必须要重新开一个线程才可以。而且加载网络图片也很麻烦。。。花了很久一直卡在快速滑动加载网络图片的listview上面 ,一直很纠结痛苦。。。
but 今天发现了 新的联网方式,感激谷歌啊。Volley
忽然发现以前那些 HttpClient或者HttpUrlConnection 都去死吧 。。还是你好用啊。。
用法
ImageVIew 加载图片
核心ImageRequest
1首先
private RequestQueue mQueue;
2在OnCreate方法中对其进行初始化
mQueue = Volley.newRequestQueue(this);
3 创建ImageRequest对象,并将其添加到mQueue中
public void readBitmapViaVolley(String imgUrl, final ImageView imageView) {
		ImageRequest imgRequest = new ImageRequest(imgUrl,
				new Response.Listener<Bitmap>() {
					@Override
					public void onResponse(Bitmap arg0) {
						// TODO Auto-generated method stub
						imageView.setImageBitmap(arg0);
					}
				},   //紫色代码 表示  联网成功后的回调
				300, 
				200, 
				Config.ARGB_8888, 
				new ErrorListener() {
					@Override
					public void onErrorResponse(VolleyError arg0) {
						
					}
				});  //联网失败后 的回调。
		mQueue.add(imgRequest); //添加到mQueue中,完成绑定。
}
在上面,我们可以看到,在ImageRequest的构造函数中,我们就可以直接将一些关于Bitmap的参数给传进去了,比如长宽等信息,然后在其返回的Response.Listener中获得返回的结果,就是一个Bitmap了,并在onResponse函数中对ImageView进行设置,最后将其添加到mQueue中。
上面的代码 和httpclient 与HttpUrlConnection 在多线程中访问图片的效果是一样的,只是代码简洁了很多。。哈哈 再一次感谢谷歌。
ImageVIew 加载Json
首先 老样子
private RequestQueue mQueue;
mQueue = Volley.newRequestQueue(this);
public void getWeatherInfo(){
	JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(WEATHER_LINK, null, 
			new Response.Listener<JSONObject>() {
				@Override
				public void onResponse(JSONObject arg0) {
					list.clear();
					Iterator<String> it = arg0.keys();
					while(it.hasNext()){
						String key = it.next();
						JSONObject obj = null;
						try {
							 obj = arg0.getJSONObject(key);
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						if (obj != null) {
							Iterator<String> objIt = obj.keys();
							while (objIt.hasNext()) {
								String objKey = objIt.next();
								String objValue;
								try {
								objValue = obj.getString(objKey);
								HashMap<String, String> map = new HashMap<String, String>();
								map.put("title", objKey);
								map.put("content", objValue);
								Log.v(TAG, "title = " + objKey + " | content = " + objValue);
								list.add(map);
								} catch (JSONException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						}
					}
					Log.v(TAG, "list.size = " + list.size());
				}			
			}, new Response.ErrorListener() {
				@Override
				public void onErrorResponse(VolleyError arg0) {
				}
			});
	mQueue.add(jsonObjectRequest);
根据json 数据的不同 ,可以使用 JsonArrayRequest 或者JsonObjectRequest
posted on 2014-08-01 18:39 Top@Gragon 阅读(256) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 
