获取网络图片的几种方式

来源:互联网 发布:python抢电影票 编辑:程序博客网 时间:2024/05/22 08:25

     获取网络图片是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);

     

1 0
原创粉丝点击