《新闻阅读器》总结”三“ ImageLoader

来源:互联网 发布:em算法 q函数 编辑:程序博客网 时间:2024/06/06 10:57

 如何通过url,访问网络加载图片:


1.先建立网络连接

  URL url = new URL(urlString);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

2.从网络中获取输入流
            is = new BufferedInputStream(connection.getInputStream());
3.将数据流转化为图片
            bitmap = BitmapFactory.decodeStream(is);
4.把连接关闭

 connection.disconnect();

5.返回图片

            if (bitmap != null) {
                return bitmap;

    }


返回的图片不能对UI线程进行更新需要借助Handler。


ImagerLoader:

/** *       这个类获通过url 访问网络, *       获取图片资源。 * */public class ImageLoader {    private ImageView mImageView;    private String mUrl;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (mImageView.getTag().equals(mUrl)) {                mImageView.setImageBitmap((Bitmap) msg.obj);            }        }    };    //使用多线程方式实现异步加载    public void showImage(ImageView imageView, final String url) {        Log.e("======", "showImage");        mImageView = imageView;        mUrl = url;        new Thread() {            @Override            public void run() {                super.run();                Bitmap bitmap = getBitmapFromURL(url);                if (bitmap != null) {                    Message message = Message.obtain();                    message.obj = bitmap;                    handler.sendMessage(message);                }            }        }.start();    }    public Bitmap getBitmapFromURL(String urlString) {        Bitmap bitmap;        InputStream is = null;        //通过URL获得数据流        try {            
/** *       这个类获通过url 访问网络, *       获取图片资源。 * */public class ImageLoader {    private ImageView mImageView;    private String mUrl;    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (mImageView.getTag().equals(mUrl)) {                mImageView.setImageBitmap((Bitmap) msg.obj);            }        }    };    //使用多线程方式实现异步加载    public void showImage(ImageView imageView, final String url) {        Log.e("======", "showImage");        mImageView = imageView;        mUrl = url;        new Thread() {            @Override            public void run() {                super.run();                Bitmap bitmap = getBitmapFromURL(url);                if (bitmap != null) {                    Message message = Message.obtain();                    message.obj = bitmap;                    handler.sendMessage(message);//把Bitmap 传递给Handler,让Handler进行更新ListView                }            }        }.start();    }    public Bitmap getBitmapFromURL(String urlString) {        Bitmap bitmap;        InputStream is = null;        //通过URL获得数据流        try {            URL url = new URL(urlString);            HttpURLConnection connection = (HttpURLConnection) url.openConnection();            is = new BufferedInputStream(connection.getInputStream());            //将数据流转化为图片            bitmap = BitmapFactory.decodeStream(is);            connection.disconnect();            if (bitmap != null) {                return bitmap;            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                is.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return null;    }}
} catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }}

0 0
原创粉丝点击