安卓三级缓存图片

首先定义一个类

LruUtils单位类

public class LruUtils {

private LruCache<String, Bitmap>lruCache;
private long max=Runtime.getRuntime().maxMemory();//手机最大内存
public LruUtils(){
    lruCache=new LruCache<String,Bitmap>((int) (max/8)){
        @Override
        protected int sizeOf(String key, Bitmap value) {
            return value.getByteCount();
        }
    };
}
//自定义读取图片
public Bitmap readBitmap(String key){
    return lruCache.get(key);
}
/自定义保存图片
public void saveBitmap(String key,Bitmap bitmap){
    lruCache.put(key,bitmap);
}

}

SdUtils单位类

public class SdUtils {

  //  自定义保存图片
public static void saveBitmap(String name, Bitmap bitmap){

    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        File saveF = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File file = new File(saveF, name);

        try{
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(file));
        }catch (Exception e){

        }
    }
}
      //  自定义保存图片
public static Bitmap readBitMap(String name){
    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        File readFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        File file = new File(readFile, name);
        return BitmapFactory.decodeFile(file.getAbsolutePath());
    }
    return  null;
}

}

NetUtils单位类

public class NetUtils {

public static Bitmap getBitmap(String url) throws ExecutionException, InterruptedException {
    return new MyTask().execute(url).get();
}

static class MyTask extends AsyncTask<String,String,Bitmap> {
@Override
protected Bitmap doInBackground(String… strings) {
String imageURl=strings[0];
HttpURLConnection httpCon=null;
try {
URL url = new URL(imageURl);
httpCon=(HttpURLConnection)url.openConnection();
httpCon.setReadTimeout(5000); // 设置读取超时时间
httpCon.setConnectTimeout(5000); // 设置连接超时时间
httpCon.setRequestMethod(“GET”); // 设置请求方式

            if(httpCon.getResponseCode()==200){
                InputStream is = httpCon.getInputStream();
                //里面存放inputStream
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                //返回一个bitmap
                return bitmap;
            }

        }catch (Exception e){
          e.printStackTrace();
        }finally {
            if(httpCon!=null){
                httpCon.disconnect();
            }
        }
        return null;
    }
}

}

主类

主类

public class gong extends AppCompatActivity {

String url="http://www.qubaobei.com/ios/cf/uploadfile/132/59/58317.jpg";
private ImageView imageView;
private LruUtils lruUtils=new LruUtils();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gong);
    imageView=findViewById(R.id.image);


    try {
        custom();
    }catch (Exception e){

    }
}

private void custom() throws ExecutionException, InterruptedException, FileNotFoundException {
    Bitmap bitmap = lruUtils.readBitmap("你好");
    if(bitmap!=null){
        imageView.setImageBitmap(bitmap);
        Toast.makeText(this, "图片来自内存", Toast.LENGTH_SHORT).show();
    }else{
        bitmap = SdUtils.readBitmap("你好.jpg");
        if(bitmap!=null){
            imageView.setImageBitmap(bitmap);
            Toast.makeText(this, "图片从sd来的", Toast.LENGTH_SHORT).show();
            lruUtils.saveBitmap("你好",bitmap);
        }else{
            bitmap= NetUtils.getBitmap(url);
            if(bitmap!=null){
                imageView.setImageBitmap(bitmap);
                Toast.makeText(this, "图片从网络获取", Toast.LENGTH_SHORT).show();
                SdUtils.saveBitmap("你好.jpg",bitmap);
                lruUtils.saveBitmap("你好",bitmap);
            }else{
                Toast.makeText(this, "请连接网络", Toast.LENGTH_SHORT).show();
            }
        }
    }


}

}

在这里插入图片描述实现效果:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值