Android 实现下载进度条

Android 实现下载进度条,android,download,Android,Download,可能重复: 我正在尝试下载图像(大概20?),然后将它们保存到缓存中。 如何实现下载进度条?如果我实现了下载进度条,则每个图像都来自一个单独的链接。。在我的情况下,它会加载下载条二十次吗 这是我下载图像并将其保存为缓存的方式: /** * Background Async Task to Load all product by making HTTP Request * */ class downloadMagazine extends AsyncTask<String, Stri

可能重复:

我正在尝试下载图像(大概20?),然后将它们保存到缓存中。 如何实现下载进度条?如果我实现了下载进度条,则每个图像都来自一个单独的链接。。在我的情况下,它会加载下载条二十次吗

这是我下载图像并将其保存为缓存的方式:

/**
 * Background Async Task to Load all product by making HTTP Request
 * */

class downloadMagazine extends AsyncTask<String, String, String> {
 @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(MainActivity.this);
        progressDialog.setMessage("Loading.." + "\n" + "加载中..");
        progressDialog.setIndeterminate(false);
        progressDialog.setCancelable(false);
        progressDialog.show();
    } 
/**
 * getting preview url and then load them
 * */
protected String doInBackground(String... args) {
    // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        JSONObject json = jParser.makeHttpRequest(url_magazine, "GET", params);

        // Check your log cat for JSON reponse
        try {
            // Checking for SUCCESS TAG
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // magazines found
                // Getting array of magazines
                mag = json.getJSONArray(TAG_MAGAZINE);

                for (int i = 0; i < mag.length(); i++) {
                    JSONObject c = mag.getJSONObject(i);

                    // Storing each json item in variable
                    String magazineUrl = c.getString(TAG_MAGAZINE_URL);
                    //String issueName = c.getString(TAG_MAGAZINE_NAME);

                    urlList.add(magazineUrl);
                    //issueNameList.add(issueName);

                }                   
            } 
        } catch (JSONException e) {
            e.printStackTrace();
        }           

        // Building Parameters
        List<NameValuePair> param = new ArrayList<NameValuePair>();
        // getting JSON string from URL
        JSONObject json1 = jParser.makeHttpRequest(urlList.get(pos), "GET", param);

        // CHECKING OF JSON RESPONSE
        // Log.d("All guide: ", json.toString());

        try {
            issues = json1.getJSONArray(TAG_ISSUE);

            for (int i = 0; i < issues.length(); i++) {
                JSONObject c = issues.getJSONObject(i);

                String image = c.getString(TAG_IMAGE);

                imageList.add(image);
                //System.out.println(imageList);
            }   

            // STOP THE LOOP
            //break;

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
        }

/**
 * After completing background task Dismiss the progress dialog
 * **/
protected void onPostExecute(String file_url) {

/**
 *  Updating parsed JSON data into ListView
* */ 

    progressDialog.dismiss();
    getBitmap();
    buttonsCheck();
}
  }

private Bitmap getBitmap() {
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
    cacheDir=new File(android.os.Environment.getExternalStorageDirectory() + folderName+"/Issues/"+issueNumber);
else
    cacheDir=context.getCacheDir();
if(!cacheDir.exists())
    cacheDir.mkdirs();

for (int i=0; i<=imageList.size()-1; i++)
{
    String image= imageList.get(i);
    try
    {
        String filename = String.valueOf(image.hashCode());
        Log.v("TAG FILE :", filename);
        File f = new File(cacheDir, filename);

        // Is the bitmap in our cache?
        Bitmap bitmap = BitmapFactory.decodeFile(f.getPath());
                // Download it
                try {
                    bitmap = BitmapFactory.decodeStream(new URL(image)
                    .openConnection().getInputStream());
                    // save bitmap to cache for later
                    writeFile(bitmap, f);
                    }    
                catch (FileNotFoundException ex) 
                {
                    ex.printStackTrace();
                    Log.v("FILE NOT FOUND", "FILE NOT FOUND");
                }
    catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }

}

catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}
}

    return null;
}

private void writeFile(Bitmap bmp, File f) {
FileOutputStream out = null;

try {
    out = new FileOutputStream(f);
    bmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
} catch (Exception e) { 
    e.printStackTrace();
} finally {
    try {
        if (out != null)
            out.close();
    } catch (Exception ex) {
    }
}
}
/**
*通过发出HTTP请求加载所有产品的后台异步任务
* */
类downloadMagazine扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=新建progressDialog(MainActivity.this);
progressDialog.setMessage(“正在加载…”+“\n”+”加载中..");
progressDialog.setUndeterminate(false);
progressDialog.setCancelable(假);
progressDialog.show();
} 
/**
*获取预览url,然后加载它们
* */
受保护的字符串doInBackground(字符串…args){
//建筑参数
List params=new ArrayList();
//从URL获取JSON字符串
JSONObject json=jParser.makeHttpRequest(url_杂志,“GET”,参数);
//检查日志cat中的JSON响应
试一试{
//检查成功标签
int success=json.getInt(TAG_success);
如果(成功==1){
//找到的杂志
//获取一系列杂志
mag=json.getJSONArray(TAG_杂志);
对于(int i=0;i对于(int i=0;iYes),使用AsyncTask并在对话框中显示下载进度:

//将对话框声明为活动的成员字段 进程对话框

//在onCreate方法中实例化它

mProgressDialog = new ProgressDialog(YourActivity.this);
mProgressDialog.setMessage("A message");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

DownloadFile downloadFile = new DownloadFile();

downloadFile.execute("Put here the URL .amr file");

private class DownloadFile extends AsyncTask<String, Integer, String> {
    @Override
    protected String doInBackground(String... sUrl) {
        try {
            URL url = new URL(sUrl[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            // this will be useful so that you can show a typical 0-100% progress bar
            int fileLength = connection.getContentLength();

        // download the file
        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream("/sdcard/file_name.extension");

        byte data[] = new byte[1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;
            // publishing the progress....
            publishProgress((int) (total * 100 / fileLength));
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {
    }
    return null;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    mProgressDialog.show();
}

@Override
protected void onProgressUpdate(Integer... progress) {
    super.onProgressUpdate(progress);
    mProgressDialog.setProgress(progress[0]);
}
mProgressDialog=newprogressdialog(YourActivity.this);
设置消息(“消息”);
mProgressDialog.setUndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_水平);
DownloadFile DownloadFile=新的DownloadFile();
downloadFile.execute(“将URL.amr文件放在这里”);
私有类下载文件扩展异步任务{
@凌驾
受保护的字符串背景(字符串…sUrl){
试一试{
URL=新URL(sUrl[0]);
URLConnection=url.openConnection();
connection.connect();
//这将非常有用,以便您可以显示典型的0-100%进度条
int fileLength=connection.getContentLength();
//下载该文件
InputStream输入=新的BufferedInputStream(url.openStream());
OutputStream output=新文件OutputStream(“/sdcard/file_name.extension”);
字节数据[]=新字节[1024];
长总计=0;
整数计数;
而((计数=输入。读取(数据))!=-1){
总数+=计数;
//发布进度。。。。
出版进度((整数)(总计*100/文件长度));
输出.写入(数据,0,计数);
}
output.flush();
output.close();
input.close();
}捕获(例外e){
}
返回null;
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mProgressDialog.show();
}
@凌驾
受保护的void onProgressUpdate(整数…进度){
super.onProgressUpdate(进度);
mProgressDialog.setProgress(progress[0]);
}
}

  • ,
  • 显示progressbar并开始下载文件
  • 下载更新进度时
  • 只有在下载完所有文件后,才能删除您的工具栏

  • 我想这些线程会对你有所帮助..我尝试过这种方法,它确实有效,但现在的问题是,在我的下载结束之前,酒吧移动得更快,达到100%!