android异步加载图片
16lz
2022-03-13
importjava.io.BufferedOutputStream;
- importjava.io.File;
- importjava.io.FileNotFoundException;
- importjava.io.FileOutputStream;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.net.HttpURLConnection;
- importjava.net.MalformedURLException;
- importjava.net.URL;
- importjava.util.WeakHashMap;
- importorg.apache.http.HttpStatus;
- importcom.android.lalala.util.lalalaApplication;
- importandroid.graphics.Bitmap;
- importandroid.graphics.Bitmap.CompressFormat;
- importandroid.graphics.BitmapFactory;
- importandroid.os.Handler;
- importandroid.widget.ImageView;
- /**
- *图片下载与缓存思路是,先查看内存,后检查SDcard,没有的话联网进行下载。
- */
- publicclassImageLoader{
- privateImageViewimageView=null;
- privateStringurlPath="";
- privateWeakHashMap<String,Bitmap>picsHashMap=null;
- privateStringurlHashCode="";
- privateStringfilePath="";
- privateHandlerhandler=null;
- privateBitmaphandlerBitmap=null;
- /**
- *构造器
- *
- *@paramimageView
- *imageview对象
- *@paramurlPath
- *下载的url地址
- *@paramfilePath
- *缓存文件夹名称
- */
- publicImageLoader(ImageViewimageView,StringurlPath,StringfilePath){
- super();
- this.imageView=imageView;
- this.urlPath=urlPath;
- this.filePath=filePath;
- urlHashCode=String.valueOf(urlPath.hashCode());
- //从application中获取picHashMap对象
- picsHashMap=lalalaApplication.getInstance().getPicHashMap();
- handler=newHandler();
- newimageLoaderThread().start();
- }
- /**
- *图片下载线程
- */
- privateclassimageLoaderThreadextendsThread{
- @Override
- publicvoidrun(){
- super.run();
- if(readFromRAM()){
- return;
- }
- if(readFromSDcard()){
- return;
- }
- httpDownload();
- }
- }
- /**
- *开始下载
- */
- privatevoidhttpDownload(){
- try{
- URLurl=newURL(urlPath);
- HttpURLConnectionconnection=(HttpURLConnection)url
- .openConnection();
- connection.setConnectTimeout(10*1000);
- if(connection.getResponseCode()==HttpStatus.SC_OK){
- InputStreamis=connection.getInputStream();
- Bitmapbitmap=BitmapFactory.decodeStream(is);
- setBitmap(bitmap);
- lalalaApplication.getInstance().getPicHashMap()
- .put(urlHashCode,bitmap);
- saveToSDcard(bitmap);
- }
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- /**
- *将bitmap保存至SD卡上
- *
- *@parambitmap
- *bitmap
- */
- privatevoidsaveToSDcard(Bitmapbitmap){
- try{
- StringfileName=filePath+"/"+urlHashCode+".JPG";
- Filefile=newFile(filePath);
- if(!file.exists()){
- file.mkdir();
- }
- BufferedOutputStreamoutputStream=newBufferedOutputStream(
- newFileOutputStream(newFile(fileName)));
- bitmap.compress(CompressFormat.JPEG,100,outputStream);
- }catch(FileNotFoundExceptione){
- e.printStackTrace();
- }
- }
- /**
- *从内存中读取bitmap图片数据
- *
- *@returntrue内存中有数据false内存中无数据
- */
- privatebooleanreadFromRAM(){
- if(picsHashMap.containsKey(urlHashCode)){
- Bitmapbitmap=picsHashMap.get(urlHashCode);
- setBitmap(bitmap);
- returntrue;
- }
- returnfalse;
- }
- /**
- *从SD卡读取图片
- *
- *@returntrueSDcard中有数据falseSDcard中无数据
- */
- privatebooleanreadFromSDcard(){
- StringfileName=filePath+"/"+urlHashCode+".JPG";
- Filefile=newFile(fileName);
- if(!file.exists()){
- returnfalse;
- }else{
- Bitmapbitmap=BitmapFactory.decodeFile(fileName);
- picsHashMap.put(urlHashCode,bitmap);
- setBitmap(bitmap);
- returntrue;
- }
- }
- /**
- *设置图片
- *
- *@parambitmap
- *图片
- */
- privatevoidsetBitmap(Bitmapbitmap){
- this.handlerBitmap=bitmap;
- handler.post(newRunnable(){
- @Override
- publicvoidrun(){
- imageView.setImageBitmap(handlerBitmap);
- }
- });
- }
- }
更多相关文章
- Android(安卓)tips2
- Android(安卓)数据和文件存储
- Android(安卓)数据和文件存储
- Android本地数据搜索实现
- Android(安卓)加载图片文件 函数
- Android(安卓)计时器 分:秒:毫秒 http://download.csdn.net/detail
- android中listview分批加载数据
- Android(安卓)导出数据库到Excel表格功能
- mybatisplus的坑 insert标签insert into select无参数问题的解决