HttpEntity.getContent()进度指示器?

时间:2011-07-19 17:17:57

标签: android multithreading streaming progressdialog

在android API 7+中有什么方法我可以报告调用HttpEntity.getContent()的进度吗?

在我的情况下,我在响应流中获取图像,因此传输可能需要一段时间。我希望将样式设置为ProgressDialog的{​​{1}}更新为传输进度。

有什么办法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您是否尝试HttpEntity.getContentLength()来帮助您预先确定文件的大小?如果将它与AsyncTask的onProgressUpdate()结合使用,你应该能够实现它。

看一下这个链接

Download a file with Android, and showing the progress in a ProgressDialog

它几乎就是你要找的东西。它使用urlConnection来获取InputStream,因此您需要调整它以使用HttpEntity。所以也许你会有这样的事情。

@Override
protected String doInBackground(String... aurl) {
    int count;
    long contentLength = <yourHttpEntity>.getContentLength();
    InputStream input = new BufferedInputStream(<yourHttpEntity>.getContent());
    OutputStream output = new FileOutputStream("/sdcard/your_photo.jpg");

    byte data[] = new byte[1024];

    long total = 0;
    while ((count = input.read(data)) != -1) {
        total += count;
        publishProgress(""+(int)((total*100)/contentLength));
        output.write(data, 0, count);
    }

    output.flush();
    output.close();
    input.close();
}

并在onProgressUpdate中更新对话框。