获取网络图片是Android中常用的功能,除了随着应用网络请求框架的不同,获取网络图片的代码也就不同。自己总结了几种方式:
(1)使用HttpUrlConnection方式请求网络,这种方式不适用于多个图片下载的场景
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)
url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(2000);
conn.connect();
if (conn.getResponseCode() == 200) {
InputStream is = conn.getInputStream();
//解析数据流 解析成图片
Bitmap bitmap = BitmapFactory.decodeStream(is);
Message message = myHandler.obtainMessage();
message.obj = bitmap;
myHandler.sendMessage(message);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
private Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.obj != null) {
Bitmap bitmap = (Bitmap) msg.obj;
image1.setImageBitmap(bitmap);
}
};
};
(2)使用volley方式 volley方式用到的主要的核心类是ImageRequest
1.创建请求队列(一个页面创建一个就OK)
2.创建进行图片请求的对象
3.把图片请求加入到请求队列当中
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
ImageRequest imageRequest = new ImageRequest(path, new Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
image.setImageBitmap(response);
}
}, 0, 0, Config.ARGB_8888, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
image.setImageResource(R.drawable.ic_launcher);
}
});
queue.add(imageRequest);
(3)使用ImageLoader进行图片请求
1.创建请求队列
2.创建ImageLoader
3.使用ImageLoader获取图片
RequestQueue queue = Volley.newRequestQueue(context);
ImageCache imageCache = new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
}
@Override
public Bitmap getBitmap(String url) {
return null;
}
};
ImageLoader imageLoader = new ImageLoader(queue,imageCache);
ImageListener imageListener = ImageLoader.getImageListener(image1, R.drawable.ic_launcher, R.drawable.ic_launcher);
imageLoader.get(path,imageListener);
(4)使用Volley里面的NetWorkImageView,这个控件继承了ImageView的所有属性,结合了ImageLoader
private NetworkImageView image;
image = (NetworkImageView) findViewById(R.id.image);
ImageCache imageCache2 = new ImageCache() {
@Override
public void putBitmap(String url, Bitmap bitmap) {
// TODO Auto-generated method stub
}
@Override
public Bitmap getBitmap(String url) {
// TODO Auto-generated method stub
return null;
}
};
ImageLoader imageLoader2 = new ImageLoader(queue, imageCache2);
image.setDefaultImageResId(0);
image.setErrorImageResId(R.drawable.ic_launcher);
image.setImageUrl(path, imageLoader2);
(5)使用Picasso获取图片,一句代码
Picasso.with(MainActivity.this).load(path).centerCrop().resize(targetWidth, targetHeight).into(image1);