package com.aiyou.viewLargeImage; import com.aiyou.bbs.utils.BBSManager; import com.aiyou.utils.filecache.FileManager; import com.aiyou.utils.http.HttpManager; import android.content.Context; import android.os.AsyncTask; /** * 获取大图片的异步线程类 * * @author sollian */ public class GetLargeImgTask extends AsyncTask<Void, Integer, byte[]> { private FileManager mFileMgr = new FileManager(FileManager.DIR_LARGEIMG); private Context mContext; private String mUrl; private ProgressListener mListener; public GetLargeImgTask(Context context, String url, ProgressListener listener) { mContext = context; mUrl = url; mListener = listener; } @Override protected void onPreExecute() { if (mListener != null) { mListener.onStartProgress(); } } @Override protected byte[] doInBackground(Void... params) { publishProgress(1); byte[] data; if (isCancelled()) { return null; } // 判断是否是论坛图片 String strUrl = mUrl; if (strUrl.endsWith("middle") || strUrl.endsWith("small")) { strUrl = strUrl.substring(0, strUrl.lastIndexOf('/')); } if (!progress(1, 10)) { return null; } // 优先从SD卡加载图片 data = mFileMgr.getImage(strUrl); if (!progress(11, 25)) { return null; } // 若不存在,则从网络下载,然后存储到本地 if (data == null) { try { data = getBmpByUrl(strUrl); } catch (OutOfMemoryError e) { return null; } if (!progress(26, 80)) { return null; } mFileMgr.saveWebBmpToSd(data, strUrl); } else { if (!progress(26, 80)) { return null; } } if (!progress(81, 99)) { return null; } if (isCancelled()) { return null; } return data; } @Override protected void onProgressUpdate(Integer... values) { if (mListener != null) { mListener.onProgress(values[0]); } } @Override protected void onPostExecute(byte[] result) { if (mListener != null) { mListener.onFinishProgress(result); } } /** * 发送进度信息 * * @param start * @param end * @return */ public boolean progress(int start, int end) { for (int i = start; i <= end; i++) { if (isCancelled()) { return false; } publishProgress(i); try { Thread.sleep(5); } catch (InterruptedException e) { return false; } } return true; } /** * 获取图片的方法 * * @param url * @return * @throws Exception */ public byte[] getBmpByUrl(String url) { byte[] data; if (url.contains(BBSManager.API_HEAD)) { // 论坛图片 url += BBSManager.FORMAT + "?appkey=" + BBSManager.APPKEY; } data = HttpManager.getInstance(mContext).getHttpByte(mContext, url); return data; } public interface ProgressListener { void onStartProgress(); void onProgress(int progress); void onFinishProgress(byte[] result); } }