国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 大文件上傳時處理上傳進度問題小結

2019-12-12 03:01:13
字體:
來源:轉載
供稿:網友

進行大文件上傳時,顯示上傳進度是很好的用戶體驗,可以有效的緩解用戶急躁的情緒。今天Android IT 分享一個好的顯示上傳進度的解決方案。

我們用到以下兩個類就可實現帶進度條的文件上傳:

1、CustomMultiPartEntity extends MultipartEntity,

2、HttpMultipartPost extends AsyncTask

import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.Charset; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity;  public class CustomMultipartEntity extends MultipartEntity {   private final ProgressListener listener;   public CustomMultipartEntity(final ProgressListener listener) {     super();     this.listener = listener;   }   public CustomMultipartEntity(final HttpMultipartMode mode, final ProgressListener listener) {     super(mode);     this.listener = listener;   }   public CustomMultipartEntity(HttpMultipartMode mode, final String boundary,       final Charset charset, final ProgressListener listener) {     super(mode, boundary, charset);     this.listener = listener;   }   @Override   public void writeTo(final OutputStream outstream) throws IOException {     super.writeTo(new CountingOutputStream(outstream, this.listener));   }   public static interface ProgressListener {     void transferred(long num);   }   public static class CountingOutputStream extends FilterOutputStream {     private final ProgressListener listener;     private long transferred;     public CountingOutputStream(final OutputStream out, final ProgressListener listener) {       super(out);       this.listener = listener;       this.transferred = 0;     }     public void write(byte[] b, int off, int len) throws IOException {       out.write(b, off, len);       this.transferred += len;       this.listener.transferred(this.transferred);     }     public void write(int b) throws IOException {       out.write(b);       this.transferred++;       this.listener.transferred(this.transferred);     }   } } 

該類計算寫入的字節數,我們需要在實現ProgressListener中的trasnfered()方法,更行進度條 

public class HttpMultipartPost extends AsyncTask<HttpResponse, Integer, TypeUploadImage> {   ProgressDialogpd;   longtotalSize;   @Override   protectedvoidonPreExecute(){     pd= newProgressDialog(this);     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);     pd.setMessage("Uploading Picture...");     pd.setCancelable(false);     pd.show();   }    @Override   protectedTypeUploadImagedoInBackground(HttpResponse... arg0) {     HttpClienthttpClient = newDefaultHttpClient();     HttpContexthttpContext = newBasicHttpContext();     HttpPosthttpPost = newHttpPost("http://herpderp.com/UploadImage.php");     try{       CustomMultipartEntitymultipartContent = newCustomMultipartEntity(           newProgressListener() {             @Override             public void transferred(longnum){               publishProgress((int) ((num / (float) totalSize) * 100));             }           });       // We use FileBody to transfer an image       multipartContent.addPart("uploaded_file", newFileBody(           newFile(m_userSelectedImagePath)));       totalSize= multipartContent.getContentLength();       // Send it       httpPost.setEntity(multipartContent);       HttpResponseresponse = httpClient.execute(httpPost, httpContext);       String serverResponse = EntityUtils.toString(response.getEntity());       ResponseFactoryrp = newResponseFactory(serverResponse);       return(TypeImage) rp.getData();     } catch(Exception e) {       System.out.println(e);     }     return null;   }   @Override   protectedvoidonProgressUpdate(Integer... progress){     pd.setProgress((int) (progress[0]));   }   @Override   protectedvoidonPostExecute(TypeUploadImageui) {     pd.dismiss();   } } 

在 transferred()函數中調用publishProgress((int) ((num / (float) totalSize) * 100));

在onProgressUpdate()實現上傳進度的更新操作

以上所述是小編給大家介紹的Android 大文件上傳時處理上傳進度問題小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松桃| 白水县| 綦江县| 明星| 逊克县| 井陉县| 中山市| 九寨沟县| 瑞金市| 科技| 嫩江县| 怀集县| 贵阳市| 马龙县| 河北区| 澄江县| 新蔡县| 九寨沟县| 闽清县| 华亭县| 博客| 新田县| 伊春市| 永川市| 海丰县| 安丘市| 苍梧县| 磐安县| 安岳县| 北票市| 阳朔县| 湘西| 临安市| 青川县| 昭觉县| 江源县| 万州区| 天水市| 伊宁市| 淮南市| 鱼台县|