对于json数据中的图片处理和图片缓存

例如:“aaa”:{
                   “bbb”:“http://photocdn.sohu.com/20140722/Img402572977.jpg”;
}

1.首先处理json,获得String url=“http://photocdn.sohu.com/20140722/Img402572977.jpg”;

2.在BaseAdapter调用iamgeLoaderByUrl(),,传进imageView和url,在方法中新开线程,处理url

public void iamgeLoaderByUrl(ImageView imageView,final String url){
        
        this.mImageView=imageView;
        this.mUrl=url;
        //从缓存中取出对应的图片
        Bitmap bitmap=getBitmapFromCache(url);
        //如果缓存中没有,那么必须去下载
        if (bitmap==null) {
            new Thread(new Runnable() {
            
            @Override
            public void run() {
                Bitmap bitmap=getbitmable(url);
                Message message=Message.obtain();
                message.obj=bitmap;
                handler.sendMessage(message);
            }
        }).start();
        }else {
            //否则直接使用缓存的图片
            mImageView.setImageBitmap(bitmap);
        }
        
    }
public void iamgeLoaderByUrl(ImageView imageView,final String url){
        
        this.mImageView=imageView;
        this.mUrl=url;
        //从缓存中取出对应的图片
        Bitmap bitmap=getBitmapFromCache(url);
      (第四步)  //如果缓存中没有,那么必须去下载
        if (bitmap==null) {
            new Thread(new Runnable() {
            
            @Override
            public void run() {
                Bitmap bitmap=getbitmable(url);
                Message message=Message.obtain();
                message.obj=bitmap;
                handler.sendMessage(message);
            }
        }).start();
        }else {
            //否则直接使用缓存的图片
            mImageView.setImageBitmap(bitmap);
        }
        
    }

public Bitmap getbitmable(String url1) {
        Bitmap bitmap=null;
        InputStream is = null;
        try {
            //从其网络获取图片
            URL url=new URL(url1);
            HttpURLConnection connection=(HttpURLConnection) url.openConnection();
            is=new BufferedInputStream(connection.getInputStream());
            bitmap=BitmapFactory.decodeStream(is);
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
*(第五步)
            //将不在缓存的图片加入缓存
            addBitmapToCache(url1, bitmap);
       
        return bitmap;
    }

//图片的缓存

//创建Cache
   (第一步) private LruCache<String, Bitmap> mCaches;
    //(第二步)
    public ImageLoader() {
        //获取最大可用内存
        int maxMemory=(int) Runtime.getRuntime().maxMemory();
        int cachSize=maxMemory/4;
        mCaches=new LruCache<String, Bitmap>(cachSize){
            @Override//(第三步)
            protected int sizeOf(String key, Bitmap value) {
                // 在每次存入缓存的时候调用
                return value.getByteCount();
            }
        };
        
    }
    
    //增加到缓存
    public void addBitmapToCache(String url,Bitmap bitmap){
        if (getBitmapFromCache(url)==null) {
            mCaches.put(url, bitmap);
        }
    }
    //从缓存中获取数据
    public Bitmap getBitmapFromCache(String url){
        return mCaches.get(url);
        
    }

图片缓存的步骤:

1.创建LruCache,并确定键值对。(Lrucache相当于Map,有键值对保存数据)
2.获取最大内存,分配一定的内存(1/4)给LruCache,并初始化。
3.在初始化里,重写SizeOf(),返回bitmap的大小。告诉系统bitmap有多大。
4.在iamgeLoaderByUrl()里,取出bitmap,判断是否为null,如果是就从网络下载,否则直接从内存取出。
5.在网络下载中,还要将下载的图片放进缓存中

需在adapter的构造方法中实例化

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值