一、volley框架的介绍
volley框架是在2013年Google I/O大会上发布的Android平台的网络通信库,使网络通信更快,更简单,更健壮。
二、volley框架的适用环境
当数据量不大但使用频率较大时,推荐使用volley框架。
例如:listview、gridview中的图片等。
三、示例代码
1.用get方式请求数据
mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
new Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "response : " + response.toString());
}
}, null));
mQueue.start();
2.用post方式请求数据
(1)获取String数据,使用StringRequest
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());//创建一个请求队列
//构造函数中第一个参数为数据请求方式
//第二个参数是请求的Url地址
StringRequest stringRequest = new StringRequest(com.android.volley.Request.Method.POST,urlString,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//String response即为得到的数据
//在onResponse方法中可直接对数据进行操作
}
},new Response.ErrorListener() {//请求出错的处理方法
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
})
{
//若需要传递参数才可以获得数据,则可以使用getParams方法
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("...",...);
...
...
return params;
}
};
mQueue.add(stringRequest);//把String请求加入到请求队列中
(2)获取Json数据,使用JsonReuqest,与StringReuquest类似
mQueue = Volley.newRequestQueue(getApplicationContext());
mQueue.add(new JsonObjectRequest(Method.GET, url, null,
new Listener() {
@Override
public void onResponse(JSONObject response) {
}
}, null));
mQueue.start();
总结一下,用volley获取string数据的步骤如下:
1.new一个请求队列
2.new一个String请求
3.将String请求加入到请求队列中
一般来说,一个类中只需要一个请求队列即可。
3.使用Volley异步加载图片
<pre name="code" class="java">ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
//第一个参数该图片的控件
//第二个参数为图片未加载完时控件显示的图片
//第三个参数为加载失败时控件显示的图片
ImageListener listener = ImageLoader.getImageListener(imageView,
R.drawable.default_image, R.drawable.failed_image);
//第一个参数url表示图片的url地址
imageLoader.get(url, listener);
//实现BitmapCache借口
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
}