volley的学习

google在2013年的io大会上推出了自己的网络操作的框架,volley,非常好用,对大量并发操作做出了很好的处理,适用于频繁加载少量数据的操作。

1.首先需要加载volley.jar文件到自己的工程里

A.首先是加载网络数据的StringRequest

大体上分为以下几个步骤:

a.创建请求的队列对象,RequestQueue

RequestQueue queen = Volley.newRequestQueue(StringRequestActivity.this);

b.创建字符串请求对象StringRequest,其构造参数非别代表:请求的url,请求成功的回调函数,请求失败的回调函数

c.将请求添加到请求队列中

queen.add(request);


StringRequestActivity.java代码如下:

public class StringRequestActivity extends Activity {

	WebView view;
	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			if (msg.what == 1) {
				String text = msg.getData().getString("value");
				view.loadDataWithBaseURL(null, text, "text/html", "utf-8", null);
			}
			
		};
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_string_request);
		view = (WebView) findViewById(R.id.show);
		new Thread(){
			public void run() {
				RequestQueue queen = Volley.newRequestQueue(StringRequestActivity.this);
				StringRequest request = new StringRequest("http://www.baidu.com",
				new Response.Listener<String>() {

					@Override
					public void onResponse(String response) {
						Message msg = new Message();
						Bundle bundle = new Bundle();
						bundle.putString("value",response);
						msg.setData(bundle);
						msg.what = 1;
						handler.sendMessage(msg);
					}
					
				},
				new Response.ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {
						// TODO Auto-generated method stub
						String s = error.toString();
						Log.d("error",error.toString());
					}
					
				});
				queen.add(request);
				
			};
			
		}.start();
	}
}

B.访问json的JsonObjectRequest

步骤和StringRequest大体相同

a.创建请求的队列对象,RequestQueue

JsonObjectRequestqueen = Volley.newRequestQueue(StringRequestActivity.this);

b.创建字符串请求对象JsonObjectRequest,其构造参数非别代表:请求的url,请求成功的回调函数,请求失败的回调函数

c.将请求添加到请求队列中

以访问天气网为例,加载网络json数据,关键代码如下:

RequestQueue queen = Volley.newRequestQueue(JsonRequestActivity.this);
				JsonObjectRequest request  = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html",null,
						new Response.Listener<JSONObject>() {

							@Override
							public void onResponse(JSONObject response) {
								// TODO Auto-generated method stub
								Message msg = new Message();
								Bundle bundle = new Bundle();
								String sg = response.toString();
								bundle.putString("value",response.toString());
								msg.setData(bundle);
								msg.what = 1;
								handler.sendMessage(msg);
							}
						},new Response.ErrorListener() {

							@Override
							public void onErrorResponse(VolleyError error) {
								// TODO Auto-generated method stub
								
							}
						});
				queen.add(request);
			};

接下来是访问网络图片的ImageRequest,关键代码如下:

	RequestQueue queen = Volley.newRequestQueue(MainActivity.this);
		ImageRequest request = new ImageRequest("http://www.iteye.com/upload/logo/user/569437/9c92e228-fe12-34a6-afbc-4c01152b1a37.jpg"
				,new Response.Listener<Bitmap>() {

					@Override
					public void onResponse(Bitmap response) {
						// TODO Auto-generated method stub
						imageview.setImageBitmap(response);
					}
				}
				,200
				,200
				,Config.RGB_565
				,new Response.ErrorListener() {

					@Override
					public void onErrorResponse(VolleyError error) {
						// TODO Auto-generated method stub
						imageview.setImageResource(R.drawable.ic_launcher);
					}
				});
		queen.add(request);

ImageRequest的构造参数分别代表:图片的url地址,加载成功的回调函数,限定图片的宽度,限定图片的高度,设置图片的质量,加载失败的回调函数。


ImageRequest用来加载网络图片已经很方便了,可是volley还给我们提供了更好用的ImageLoader

使用ImageLoader可以加载,压缩并缓存网络图片,使用步骤简单易懂,如下:

a.创建请求队列:RequestQueue,

RequestQueue queen = Volley.newRequestQueue(MainActivity.this);

b.创建用来缓存图片的类: MyImageCache继承自 ImageCache

class MyImageCache implements ImageCache {
		
		private LruCache<String,Bitmap> mCache;
		
		public MyImageCache() {
			int max = 1024*1024*10;
			mCache = new LruCache<String, Bitmap>(max) {

				@Override
				protected int sizeOf(String key, Bitmap bitmap) {
					// TODO Auto-generated method stub
					return bitmap.getRowBytes() * bitmap.getHeight();
				}
				
			};
		}

		@Override
		public Bitmap getBitmap(String url) {
			// TODO Auto-generated method stub
			return mCache.get(url);
		}

		@Override
		public void putBitmap(String url, Bitmap bitmap) {
			// TODO Auto-generated method stub
			mCache.put(url, bitmap);
		}
	}

c.创建ImageLoader对象

ImageLoader imageLoader = new ImageLoader(queen,new MyImageCache());
参数分别代表:请求队列,缓存图片的对象

d.创建ImageListener对象

ImageListener listener = imageLoader.getImageListener(imagetwo, R.drawable.three,R.drawable.ic_launcher);

参数:用来显示图片的ImageView,加载失败显示的图片,加载时显示的图片

e.调用imageloader.get(url,listener,width,height)方法加载图片

imageLoader.get("https://img-my.csdn.net/uploads/201404/13/1397393290_5765.jpeg",listener,200,200);

至此volley框架的基本学习已经告一段落。

源码下载:http://download.csdn.net/detail/mockingbirds/8146843



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值