安卓新的联网方式 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) 编辑 收藏 举报