首页 > 代码库 > 安卓新的联网方式 Volley的使用(一)加载图片与 json

安卓新的联网方式 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 one rrorResponse(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 = http://www.mamicode.com/obj.getString(objKey);"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 one rrorResponse(VolleyError arg0) {				}			});	mQueue.add(jsonObjectRequest);

  

 根据json 数据的不同  ,可以使用  JsonArrayRequest  或者JsonObjectRequest