安卓新的联网方式 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  阅读(250)  评论(0编辑  收藏  举报

导航