android 一个文件下载的工具类
主类:
/** * <p> * Copyright: Copyright (c) 2015 * Company: * Description: 这里写这个文件是干什么用的 * </p> * @Title ImgDownloadUtil.java * @Package c * @version 1.0 * @author * @date 2015年9月9日 */ package com.iptvclient.android.baseclient.startupad; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Locale; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import com.androidsdk.download.DataDownload; import com.androidsdk.download.bean.DataAttribute; import com.androidsdk.http.bean.HttpRequest; import com.androidsdk.http.bean.HttpRequestParams; import com.androidsdk.http.bean.HttpResponse; import com.androidsdk.http.download.IHttpDownloadListener; import com.iptvclient.android.androidsdk.common.LogEx; /** * 下载保存图片的工具类 * @ClassName:ImgDownloadUtil * @Description: 这里用一句话描述这个类的作用 * @author: * @date: 2015年9月9日 * */ public class ImgFileUtil { private static String LOG_TAG = "StartUpAdUtil"; private Context mContext; private ImgDownloadListener listener; private String mDownloadUrl; private String filename = "startupad"; private boolean saveSuccFlag = false; private String path; public ImgFileUtil(Context context, ImgDownloadListener l){ this.mContext = context; this.listener = l; } public void stratDownloadImg(String url){ mDownloadUrl = url; getFilename(mDownloadUrl); path = mContext.getFilesDir()+"/"+filename; doDownload(url); } private void getFilename(String url){ String urlTemp = url.toLowerCase(Locale.US); LogEx.i(LOG_TAG, "img url is "+urlTemp); if (urlTemp.contains(".gif")) { filename = filename+".gif"; }else if (urlTemp.contains(".jpg")) { filename = filename+".jpg"; }else if (urlTemp.contains(".png")) { filename = filename+".png"; }else if (urlTemp.contains(".bmp")) { filename = filename+".bmp"; } LogEx.i(LOG_TAG, "filename = "+filename); } private void doDownload(String url){ String downloadUrl = ""; try { downloadUrl = URLDecoder.decode(url,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); reportSaveFileRet(); return; } HttpRequest req = new HttpRequest(HttpRequest.METHOD_GET, downloadUrl); // 网络请求 DataAttribute attr = new DataAttribute(); attr.setMergeMode(DataDownload.FLAG_MERGE_MODE_LAST); attr.setUniqueKey(downloadUrl); HttpRequestParams params = new HttpRequestParams(attr, req, new IHttpDownloadListener() { @Override public void onError(Exception arg0) { reportSaveFileRet(); } @Override public void onData(HttpRequest datareq, HttpResponse datarsp) { do { if (null == datarsp) { break; } LogEx.d(LOG_TAG, " datarsp=" + datarsp); LogEx.d(LOG_TAG, "file size = " + datarsp.getContentLength() / 1024 + "B"); try { InputStream in = datarsp.getInputStream(); int ret = saveFile(in); if (ret ==0) { saveSuccFlag = true; } in.close(); } catch (Exception e) { e.printStackTrace(); LogEx.w(LOG_TAG, "" + e); break; } } while (false); reportSaveFileRet(); } @Override public void onCancel(HttpRequest arg0, HttpResponse arg1) { reportSaveFileRet(); } }); DataDownload.getInstance().sendHttpRequest(params); } private int saveFile(InputStream in){ if (in == null) { LogEx.w(LOG_TAG, "input null."); return -1; } FileOutputStream output = null; try { output = new FileOutputStream(path); byte[] buffer = new byte[1024]; int len = 0; while (-1 != (len = in.read(buffer))) { output.write(buffer, 0, len); } output.flush(); } catch (Exception e) { e.printStackTrace(); LogEx.w(LOG_TAG, "save file Exception " + e); return -1; } finally { try { output.close(); } catch (Exception e) { e.printStackTrace(); LogEx.w(LOG_TAG, "save file Exception " + e); return -1; } } return 0; } private void reportSaveFileRet(){ if (null == listener) { LogEx.w(LOG_TAG, "IStartAdFileListener is null"); return; } LogEx.i(LOG_TAG, "IStartAdFileListener is notified"); if (saveSuccFlag) { listener.onImgDownloaded(filename); }else{ listener.onImgDownloadFail(); } } public static InputStream readDataFile(Context context, String fileName) { FileInputStream fis = null; try { fis = context.openFileInput(fileName); } catch (FileNotFoundException e) { LogEx.w(LOG_TAG, "Read Data_No Such File"); e.printStackTrace(); } return fis; } public static Bitmap File2Bitmap(Context context,String filename) { String path = context.getFilesDir()+"/"+filename; return BitmapFactory.decodeFile(path); } public interface ImgDownloadListener{ public void onImgDownloaded(String filename); public void onImgDownloadFail(); } }
HttpRequest类:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.androidsdk.http.bean; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.http.NameValuePair; public class HttpRequest { public static final String METHOD_GET = "Get"; public static final String METHOD_POST = "Post"; public static final String METHOD_PUT = "Put"; String method; Map<String, String> headerMap; String url; List<NameValuePair> params; String body; Object extra; boolean canceled; boolean bAutoRedirect = true; public HttpRequest(String method) { this.method = method; this.headerMap = new HashMap(); } public HttpRequest(String method, String url) { this.method = method; this.url = url; this.headerMap = new HashMap(); } public HttpRequest(String method, String url, List<NameValuePair> params) { this.method = method; this.url = url; this.params = params; this.headerMap = new HashMap(); } public HttpRequest(String method, String url, String body) { this.method = method; this.url = url; this.body = body; this.headerMap = new HashMap(); } public HttpRequest(String method, String url, List<NameValuePair> params, String body) { this.method = method; this.url = url; this.params = params; this.body = body; this.headerMap = new HashMap(); } public boolean compareTo(Object o) { if(null == o) { return false; } else if(!(o instanceof HttpRequest)) { return false; } else { HttpRequest request = (HttpRequest)o; if(null == this.method && null != request.getMethod()) { return false; } else if(null != this.method && !this.method.equalsIgnoreCase(request.getMethod())) { return false; } else if(null == this.url && null != request.getUrl()) { return false; } else if(null != this.url && !this.url.equalsIgnoreCase(request.getUrl())) { return false; } else if((null != this.params || null == request.getParams()) && (null == this.params || null != request.getParams())) { if(null == this.params && null == request.getParams()) { return true; } else { ArrayList params1 = new ArrayList(); ArrayList params2 = new ArrayList(); Iterator i$; NameValuePair nvp; if(null != this.params && !this.params.isEmpty()) { i$ = this.params.iterator(); while(i$.hasNext()) { nvp = (NameValuePair)i$.next(); if(null != nvp && null != nvp.getName() && null != nvp.getValue()) { params1.add(nvp); } } } if(null != request.getParams() && !request.getParams().isEmpty()) { i$ = request.getParams().iterator(); while(i$.hasNext()) { nvp = (NameValuePair)i$.next(); if(null != nvp && null != nvp.getName() && null != nvp.getValue()) { params2.add(nvp); } } } if(params1.size() != params2.size()) { return false; } else { i$ = params1.iterator(); boolean bFound; do { if(!i$.hasNext()) { if(null == this.body && null != request.getBody()) { return false; } if(null != this.body && !this.body.equals(request.getBody())) { return false; } if(this.bAutoRedirect != request.isAutoRedirect()) { return false; } return true; } nvp = (NameValuePair)i$.next(); bFound = false; Iterator i$1 = params2.iterator(); while(i$1.hasNext()) { NameValuePair nvp2 = (NameValuePair)i$1.next(); if(nvp.getName().equals(nvp2.getName())) { if(!nvp.getValue().equals(nvp2.getValue())) { return false; } bFound = true; break; } } } while(bFound); return false; } } } else { return false; } } } public Map<String, String> getHeaderMap() { return this.headerMap; } public void setHeaderMap(Map<String, String> headerMap) { this.headerMap = headerMap; } public void enableAutoRedirect(boolean bEnable) { this.bAutoRedirect = bEnable; } public boolean isAutoRedirect() { return this.bAutoRedirect; } public void addHeader(String name, String value) { if(null != name && !"".equals(name.trim())) { if(null != value && !"".equals(value.trim())) { String newName = name.trim(); String newValue = value.trim(); if(this.headerMap.containsKey(newName)) { String val = (String)this.headerMap.get(newName); if(null != val && !"".equals(val)) { String[] valArray = val.split(";"); String[] sb = valArray; int len$ = valArray.length; for(int i$ = 0; i$ < len$; ++i$) { String v = sb[i$]; if(v.equalsIgnoreCase(newValue)) { return; } } StringBuilder var11 = new StringBuilder(val); var11.append(";").append(newValue); newValue = var11.toString(); } } this.headerMap.put(newName, newValue); } } } public void setHeader(String name, String value) { if(null != name && !"".equals(name.trim())) { if(null != value && !"".equals(value.trim())) { this.headerMap.put(name.trim(), value.trim()); } } } public String getMethod() { return this.method; } public void setMethod(String method) { this.method = method; } public String getUrl() { return this.url; } public void setUrl(String url) { this.url = url; } public List<NameValuePair> getParams() { return this.params; } public void setParams(List<NameValuePair> params) { this.params = params; } public String getBody() { return this.body; } public void setBody(String body) { this.body = body; } public Object getExtra() { return this.extra; } public void setExtra(Object extra) { this.extra = extra; } public boolean isCanceled() { return this.canceled; } public void setCanceled(boolean canceled) { this.canceled = canceled; } }
DataAttribute接口:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.androidsdk.download.bean; public class DataAttribute { int mergeMode; int concurrentNum; String uniqueKey; public DataAttribute() { } public int getMergeMode() { return this.mergeMode; } public void setMergeMode(int mergeMode) { this.mergeMode = mergeMode; } public int getConcurrentNum() { return this.concurrentNum; } public void setConcurrentNum(int concurrentNum) { this.concurrentNum = concurrentNum; } public String getUniqueKey() { return this.uniqueKey; } public void setUniqueKey(String uniqueKey) { this.uniqueKey = uniqueKey; } }
HttpRequestParams接口:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.androidsdk.http.bean; import com.androidsdk.download.bean.DataAttribute; import com.androidsdk.http.bean.HttpAttribute; import com.androidsdk.http.bean.HttpRequest; import com.androidsdk.http.download.IHttpDownloadListener; public class HttpRequestParams { DataAttribute attr; HttpAttribute httpAttr; HttpRequest req; IHttpDownloadListener listener; public HttpRequestParams(DataAttribute attr, HttpRequest req, IHttpDownloadListener listener) { this.attr = attr; this.req = req; this.listener = listener; } public HttpRequestParams(DataAttribute attr, HttpAttribute httpAttr, HttpRequest req, IHttpDownloadListener listener) { this.attr = attr; this.httpAttr = httpAttr; this.req = req; this.listener = listener; } public DataAttribute getAttr() { return this.attr; } public HttpAttribute getHttpAttr() { return this.httpAttr; } public void setHttpAttr(HttpAttribute httpAttr) { this.httpAttr = httpAttr; } public HttpRequest getReq() { return this.req; } public IHttpDownloadListener getListener() { return this.listener; } public void setListener(IHttpDownloadListener listener) { this.listener = listener; } }
IHttpDownloadListener回调接口:
package com.androidsdk.http.download; import com.androidsdk.http.bean.HttpRequest; import com.androidsdk.http.bean.HttpResponse; public interface IHttpDownloadListener { void onError(Exception var1); void onData(HttpRequest var1, HttpResponse var2); void onCancel(HttpRequest var1, HttpResponse var2); }