有些天没有写东西了,今晚来一发,以前我写Android的网络部分基本上都是用多线程。然而前段时间无意中发现其实谷歌早在2013年就推出过Volley框架。

通过图片我们大概可以了解Volley框架主要是为了解决网络并发,以及对网络请求做了一些优化。其实原理还是在基于多线程,只是谷歌将它好好的封装了,给我们开发者省去了不少麻烦。而且加载网络图片还给增加了缓存。接下来不罗嗦,直接上代码,这是一个加载本地服务器图片的Demo
(ps:注释的部分是另一种处理方法)
public class MainActivity extends Activity {
private ImageView imageview;
private NetworkImageView mNetworkImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void loadImageviewByVolley() {
String url = "http://192.168.191.1:8080/Demo/01.jpg";
imageview = (ImageView) findViewById(R.id.image_img);
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(imageview,R.drawable.default_image, R.drawable.default_image);
imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);
}
private void showImageByNetworkImageView() {
String imageUrl = "http://192.168.191.1:8080/Demo/01.jpg";
RequestQueue requestQueue = Volley.newRequestQueue(this);
final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(
20);
ImageCache imageCache = new ImageCache() {
@Override
public void putBitmap(String key, Bitmap value) {
lruCache.put(key, value);
}
@Override
public Bitmap getBitmap(String key) {
return lruCache.get(key);
}
};
ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);
mNetworkImageView.setTag("url");
mNetworkImageView.setImageUrl(imageUrl, imageLoader);
}
public void displayImg(View view){
ImageView imageView = (ImageView)this.findViewById(R.id.image_img);
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
ImageLoader imageLoader = new ImageLoader(mQueue, new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(imageView,R.drawable.default_image, R.drawable.default_image);
imageLoader.get("http://192.168.191.1:8080/Demo/01.jpg", listener);
}
}
这是处理缓存类
public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> cache;
public BitmapCache() {
cache = new LruCache<String, Bitmap>(8 * 1024 * 1024) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
}