1

我正在使用带有 imap 协议的 JavaMail 来访问我的 Gmail 帐户并从附件 BodyPart 获取 InputStream。问题是当我开始下载文件时,我想显示下载进度,但是下载了文件却没有显示进度。我尝试注销循环内读取的字节,下载过程完成后我得到了所有日志。

编辑:似乎我使用 getInputStream() 获得的 InputStream 对象已经保存了所有内容,这意味着内容已经下载到我的系统内存中的某个位置,并且当我读取该数据时,它会非常快速地传输给我。

我为此使用 AsyncTask。有任何想法吗?谢谢。

protected Void doInBackground() {
    InputStream is = bodyPart.getInputStream();

    BufferedInputStream bis = new BufferedInputStream(is);

    FileOutputStream fos = new FileOutputStream(f);

    int bytesRead;
    byte[] buf = new byte[MySettings.DOWNLOAD_BUFFER_SIZE];

    while ((bytesRead = bis.read(buf)) != -1) {
        totalBytes += bytesRead;
        publishProgress((int)(((double)((double)totalBytes/(double)size))*100));
        fos.write(buf, 0, bytesRead);
    }
    fos.flush();
    fos.close();
    bis.close();

    mDialog.dismiss();
}

protected void onProgressUpdate(Integer... progress) {
    mDialog.setProgress(progress[0]);
}

@Override
protected void onPreExecute() {
    mDialog = displayWorkingDialog(messageWhileDownloading, c);
}

public void displayWorkingDialog(String message, Context c) {
    mDialog = new ProgressDialog(c);
    mDialog.setMessage(message);
    mDialog.setCancelable(true);

    mDialog.setIndeterminate(false);
    mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

    mDialog.show();
}
4

0 回答 0