异步任务下载网络图片
2016-10-04 14:40
239 查看
package com.example.mydouban; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; public class LoadImageAsynTask extends AsyncTask<String, Void, Bitmap>{ LoadImageAsynTaskCallBack loadImageAsynTaskCallBack; public LoadImageAsynTask(LoadImageAsynTaskCallBack loadImageAsynTaskCallBack){ this.loadImageAsynTaskCallBack=loadImageAsynTaskCallBack; } //设置回调接口 public interface LoadImageAsynTaskCallBack{ public void beforeLoadImage(); public void afterLoadImage(); } /* * 异步任务执行之前调用 */ @Override protected void onPreExecute() { //具体执行什么操作LoadImageAsynTask不知道 //让调用LoadImageAsynTask的人去实现 loadImageAsynTaskCallBack.beforeLoadImage(); super.onPreExecute(); } /* * 异步任务执行之后调用 */ @Override protected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub loadImageAsynTaskCallBack.afterLoadImage(); super.onPostExecute(result); } /* * 后台子线程运行的异步任务 */ @Override protected Bitmap doInBackground(String... params) { try { String path=params[0]; URL url=new URL(path); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); InputStream is=conn.getInputStream(); return BitmapFactory.decodeStream(is); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } } // 调用这个异步任务并且sd卡缓存图片 //加入两个sd卡的权限 WRITE_EXTERNAL_STORAGE MOUNT_NUMOUNT_FILESYSTEM //获取图片的名称 String iconurl=url; String iconName=iconurl.substring(iconurl.lastIndexOf("/")+1, iconurl.length()); File file=new File("/sdcard/"+iconName); if(file.exists()){ iv_icon.setImageURI(Uri.fromFile(file)); }else{ LoadImageAsynTask task=new LoadImageAsynTask(new LoadImageAsynTaskCallBack() { @Override public void beforeLoadImage() { // TODO Auto-generated method stub iv_icon.setImageResource(); } @Override public void afterLoadImage(Bitmap bitmap) { // TODO Auto-generated method stub if(bitmap!=null){ iv_icon.setImageBitmap(bitmap); //把图片保存到sd卡上 File file=new File("/sdcard/"+iconName); FileOutputStream stream=new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 100, stream); } else{ iv_icon.setImageResource(); } } }); task.execute(url); } }
相关文章推荐
- AsyncTask 异步任务下载网络图片
- Android之AsyncTask异步任务下载网络图片
- AsyncTask --异步任务+简单的网络图片下载
- 安卓多线程编程系列2:异步任务的使用之使用异步任务带有进度的横向滚动条下载网络图片
- 安卓多线程编程系列1:异步任务的使用之使用异步任务圆圈滚动条下载网络图片
- 使用异步任务加载网络上的图片
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步下载网络图片(其三:ExecutorService)
- 使用GCD处理非UI相关的异步任务 Object-C异步多线程加载网络图片
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其三)
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步下载网络图片(其一)
- Android异步下载网络图片(3)
- 自定义Gallery异步下载并显示网络图片
- android异步从网络下载图片,并缓存到本地
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其二)
- Android异步下载网络图片(其二)