由于在项目开发时,有这样的简单需求,问谷歌,网络上也有好多Utils工具类,但是比较冗余。自己就简单的写了一个简单帮助类。
/** * 下载文件,更新UI简单帮助类 * * @author jarlen * */public class DownLoadHelper{ private static final int DOWN_BEGIN = 0; private static final int DOWN_UPDATA = 1; private static final int DOWN_FINISH = 2; private static final int DOWN_ERROR = 3; private Context mContext; private TextView mTextView; private ProgressBar mBar; private Handler handler = new Handler() { public void handleMessage(Message msg) { if (!Thread.currentThread().isInterrupted()) { switch (msg.what) { case DOWN_BEGIN: if (mTextView != null) { mTextView.setText("开始下载"); } if(mBar != null) { mBar.setProgress(0); } break; case DOWN_UPDATA: int factor = msg.arg1; if (mTextView != null) { mTextView.setText(factor + "%"); } if(mBar != null) { mBar.setProgress(factor); } break; case DOWN_FINISH: if (mTextView != null) { mTextView.setText("下载完成"); } if(mBar != null) { mBar.setProgress(100); } break; case DOWN_ERROR: if (mTextView != null) { mTextView.setText("下载错误"); } if(mBar != null) { mBar.setProgress(0); } break; default: break; } } }; }; public DownLoadHelper(Context context) { this.mContext = context; } /** * 设置下载时,需要更新的UI TextView * @param view */ public void setUpdataView(TextView view) { this.mTextView = view; } /** * 设置下载时,需要更新的UI,ProgressBar * @param bar */ public void setUpdataBar(ProgressBar bar) { this.mBar = bar; } /** * 开始下载 * @param url * 文件下载地址 * @param path * 文件保存地址 */ public void startDownLoad(final String url, final String path) { new Thread() { public void run() { sendMsg(DOWN_BEGIN, 0); try { long downloadSize = downloadUpdateFile(url, path); if (downloadSize > 0) { sendMsg(DOWN_FINISH, 0); } } catch (Exception e) { e.printStackTrace(); sendMsg(DOWN_ERROR, 0); } }; }.start(); } private long downloadUpdateFile(String down_url, String path) throws Exception { int down_step = 1;// 提示step int totalSize;// 文件总大小 int downloadCount = 0;// 已经下载好的大小 int updateCount = 0;// 已经上传的文件大小 InputStream inputStream; OutputStream outputStream; URL url = new URL(down_url); HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURLConnection.setConnectTimeout(30 * 1000); httpURLConnection.setReadTimeout(30 * 1000); // 获取下载文件的size totalSize = httpURLConnection.getContentLength(); if (httpURLConnection.getResponseCode() == 404) { sendMsg(DOWN_ERROR, 0); throw new Exception("fail!"); } inputStream = httpURLConnection.getInputStream(); File dir = new File(path); if (!dir.exists()) { dir.mkdir(); } String name = down_url.substring(down_url.lastIndexOf("/") + 1, down_url.length()); File updateFile = new File(dir, name); outputStream = new FileOutputStream(updateFile, false);// 文件存在则覆盖掉 byte buffer[] = new byte[1024]; int readsize = 0; while ((readsize = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, readsize); downloadCount += readsize;// 时时获取下载到的大小 // 每次增长1% if (updateCount == 0 || (downloadCount * 100 / totalSize - down_step) >= updateCount) { updateCount += down_step; sendMsg(DOWN_UPDATA, updateCount); } } if (httpURLConnection != null) { httpURLConnection.disconnect(); } inputStream.close(); outputStream.close(); return downloadCount; } private void sendMsg(int flag, int factor) { Message msg = new Message(); switch (flag) { case DOWN_BEGIN:// 开始 case DOWN_FINISH:// 完成 case DOWN_ERROR:// 失败 break; case DOWN_UPDATA:// 更新进度条 msg.arg1 = factor; break; default: break; } msg.what = flag; handler.sendMessage(msg); }}
使用时简单说明下;
DownLoadHelper helper1 = new DownLoadHelper(this);helper1.setUpdataView(tv1);helper1.startDownLoad("http://img1.2345.com/appsimg/wallpaper/4/139460306960.jpg", path);
/********************************************/
Demo源码下载地址
http://download.csdn.net/detail/jarlen/8552443
没有认真地检查,可能有bug,使用的伙伴请自己debug下,并通知我一下,谢谢